
目录
一、不可变集合
1、创建不可变集合的应用场景
2、创建不可变集合的书写格式
①、不可变的List集合
②、不可变的Set集合
③、不可变的Map集合
3、小结
二、Stream流
1、体验Stream流的作用
2、Stream流的思想
3、Stream流的使用步骤
①、单列集合获取Stream流
②、双列集合获取Stream流(先转成keySet()或entrySet())
③、数组获取Stream流(Arrays.stream())
④、一堆零散数据(Stream.of())
4、Stream流的中间方法
①、filter方法(过滤)
②、limit方法(获取前几个元素)
③、skip方法(跳过前几个元素)
④、练习
⑤、distinct方法(元素去重)
⑥、concat方法(合并a和b两个流为一个流)
⑦、map方法(类型转换)
5、Stream流的终结方法
①、forEach方法(遍历)
②、count方法(统计)
③、toArray方法(收集流中的数据,放到数组中)
④、collect方法(收集流中的数据,放到集合中)
6、小结
三、方法引用
1、什么是方法引用?
①、示例代码
②、小结
2、方法引用的分类
①、引用静态方法(类名::静态方法)
②、引用成员方法(对象::成员方法)
③、引用构造方法(类名::new)
④、其它调用方式(Ⅰ. 使用类名引用成员方法 Ⅱ. 引用数组的构造方法)
3、小结
4、方法引用综合小练习
①、练习1
②、练习 2
③、练习3
一、不可变集合

1、创建不可变集合的应用场景

2、创建不可变集合的书写格式

①、不可变的List集合
示例代码:

②、不可变的Set集合

③、不可变的Map集合
10个参数以下使用Map.of()

超过10个使用copyOf()


3、小结

二、Stream流
Stream是Java 8 API添加的一个新的抽象,称为流Stream,以一种声明性方式处理数据集合(侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式)。流是个抽象的概念,是对输入输出设备的抽象,在Java程序中,对于数据的输入/输出操作都是以“流”的方式进行。
Stream流是从支持数据处理操作的源生成的元素序列,源可以是数组、文件、集合、函数。流不是集合元素,它不是数据结构并不保存数据,它的主要目的在于计算
Stream流是对集合(Collection)对象功能的增强,与Lambda表达式结合,可以提高编程效率、间接性和程序可读性。
1、体验Stream流的作用

普通代码:

Stream流:

2、Stream流的思想


3、Stream流的使用步骤

示例代码:
①、单列集合获取Stream流

该代码等于注释掉的一大堆
②、双列集合获取Stream流(先转成keySet()或entrySet())

③、数组获取Stream流(Arrays.stream())


④、一堆零散数据(Stream.of())

4、Stream流的中间方法

示例代码:
①、filter方法(过滤)

②、limit方法(获取前几个元素)

③、skip方法(跳过前几个元素)

④、练习

⑤、distinct方法(元素去重)
自定义JavaBean需要中间去重写hashCode和equals方法

⑥、concat方法(合并a和b两个流为一个流)

⑦、map方法(类型转换)

可简化为:

5、Stream流的终结方法

①、forEach方法(遍历)

②、count方法(统计)

③、toArray方法(收集流中的数据,放到数组中)

④、collect方法(收集流中的数据,放到集合中)
收集到List集合中:

收集到Set集合中:

收集到Map集合中:




6、小结

三、方法引用
1、什么是方法引用?
方法引用就是把已经有的方法拿过来用,当做函数式接口中抽象方法的方法体

函数式接口:FunctionInterface

①、示例代码
匿名内部类:

lambda表达式简化:

方法引用:

②、小结

2、方法引用的分类

①、引用静态方法(类名::静态方法)


示例代码:
Stream流方法:

方法引用:


②、引用成员方法(对象::成员方法)

示例代码1:

以前的方法:

方法引用:
工具类:

引用成员方法 - 其他类:

引用成员方法 - 本类:


示例代码2:GUI界面点击事件引用方法

以前的做法:实现ActionListener

方法引用:

③、引用构造方法(类名::new)

示例代码:

只需要保证构造方法结束后生成的对象与抽象方法的返回值保持一致就可以了



④、其它调用方式(Ⅰ. 使用类名引用成员方法 Ⅱ. 引用数组的构造方法)
I、使用类名引用成员方法(类名::成员方法)—— 不是所有类的成员方法都可以引用的

示例代码:

改成方法引用:

局限性:

举例:

实例:

Ⅱ、引用数组的构造方法(数据类型[]::new)

示例代码:


3、小结

4、方法引用综合小练习

①、练习1



②、练习 2




③、练习3


相当于练习1和练习2的结合:(在Student.java中新增了一个方法getNameAge,用以返回对应格式的字符串)
 
 







![[NOIP2002 普及组] 过河卒](https://img-blog.csdnimg.cn/b816aaea74df43e99e02192b8569591a.png)













