stream流学习

stream流学习



前言

stream流学习,对stream进行梳理,掌握使用stream流的3个步骤。


提示:以下是本篇文章正文内容:

1.内容:(是什么)

stream支持链式编程:. + 其他的方法

lambda表达式已经成为JAVA代码的一种书写标准,也就是说,以后可以写lambda表达式,就要直接写,以后要习惯理解这种代码。

想一想JAVA代码如何与Excel结合,如何与.txt文件,与io流使用。(预处理数据)

一行代码就可以完成任务。就是“有点长”
用一行代码搞定很多事情

🔥🔥🔥stream流是为了让我们更加方便的操作“集合”或“数组”的一种手段。通过steam流写代码,非常简洁。
但是最后但结果也要是集合或者数组。
所以我们需要收集流的操作。

collect:收集流中的数据,
参数:Collect.toList:别人已经设计好的 表示收集为一个List集合

Stream流的使用步骤:

  1. 创建流
  2. 处理数据,使用方法
  3. 获取结果

关于stream的学习,实际上我们就是去学习他的方法,比如说:如何获取stream流,在stream中间,提供哪些常用的方法给我们对数据进行处理,处理完流后,获取结果的方法

entry键值对对象是什么?在idea中,打印看一下。
我的理解:键值对对象就是一个实例对象,在里面封装了两个成员变量,一个是key,一个是value。我们可以通过set,get方法获取他们的访问权限。
在这里插入图片描述

(1)创建stream流

list.stream()
set.stream()
//(键流)是set集合,因为key是不可以重复的,需要去重
map.ketSet().stream()
//(值流)是一个Conllection集合,因为值可以重复,
//再有set集合就不合适了
map.values().stream()

在开发当中,我们要对键值对的整体进行处理。
entrySet(),将map集合转成一个set集合的形式,
将map集合里面的键值对做一个整体。
map.entrySet().stream()

(2)调用中间方法:处理流上的数据

调用中间方法会返回新的stream流🤔🤔🤔需要我们重点掌握
sort方法里面可以传递一个比较器对象,在比较强里面,我们可以定制规则。
定制规则的代码是基于lambda开发的。o2在前,o1在后,表示降序。
整数,浮点数,字符串都不需要用到比较器,为什么因为Java提供我们了一个默认的规则。

🔥🔥🔥使用“方法引用”来简化代码

总结:如果流里面的数据是对象的话,你又要排序的话,那么你应该调用重载的sort方法,在方法里面,用lambda表达式来指定排序的规则。(比较器对象)

(3)终结方法:在流的末尾,结束流的操作

foreach终结方法,无返回值,void类型

使用max方法,需要定义一个比较规则
你为什么说他是最大值得依据,他哪里最大呢?
这个max他不是直接就把那个最大的学生对象返回给我们,他是把最大的学生对象,也就是身高最高的学生对象扔到一个容器里面去。

像optional这样一个容器,这个里面放的就是最大的学生对象。

然后通过. get方法把身高最高的对象返回给我们。(要在左边有一个变量来接取)

千万要注意:🔥流只能收集一次,收集完之后就关闭了。(流的特点🔥)
所以不要想着为了简化代码,就把开启流的操作抽取出来,只写一次。
这就像水管一样,你将这一条水管的水收集完了之后,没了就没了。后面的就收集不到了。

🔥我们每一次都要对新的流进行处理。

将流收集到map集合,你需要声明:把什么作为key,什么作为value
例如🔥:对于一个学生对象集合到流,我们将学生的名字作为key,身高作为value。
map集合,key不可以重复 需要我们自己“去重”。

收集流中的数据到数组当中去,如果没有在toArray方法中指定是什么类型的数组 那么默认为Object类型的数组。

把学生对象收集到学生数组当中,我们要自己指定数组的长度。
len —> new Student[ len ]

map方法的意思:映射,加工。
可以将一个对象(有多个属性)映射/加工, 成为一个属性值。(有些抽象)

2.目的:(为什么)

好好理解一下stream流的过程,在代码开发过程中,我们可以使用stream流完成很多事情。
我们不仅要熟练掌握java中,数组和集合原生的API,也要学习,熟练stream流的使用。
旧的知识 和 新的知识我们都要有所了解。

3.实现:(怎么做)

在这里插入图片描述
先爽一下流:
如何创建流:

.stream()
.keySet()
.values()
.entrySet()
Arrays.stream(arr);
Stream.of(arr);

掌握流的中间方法:
filter()
sort()
注意:Double.compare()
limit()
skip()
distinct()
map():加工,映射
concat()

终结方法:
forEach()
count()
max/min() + get()
collect() + Collectors.toList()
toSet()
toMap( a->a.getName(), a->a.getHeight() )
toArray()
toArray( len -> new Student[len] );
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

总结

提示:这里对文章进行总结:
😊😊😊还有一些细节问题,等到实际开发的时候去解决。“加油!!!”😊😊😊

  • 38
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lennard-lhz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值