目录结构
1、流的概念
2、流的类型
3、流的基本用法
一、流的概念
![](https://img.haomeiwen.com/i14489729/51aeb46d6b6f3adf.png)
二、流的类型
![](https://img.haomeiwen.com/i14489729/f67e8f977d7c4403.png)
三、流的基本用法
例子中用到的测试数据:
list:
![](https://img.haomeiwen.com/i14489729/dc67a42abf1fcbae.png)
list1:
![](https://img.haomeiwen.com/i14489729/5703c1d91a7ab164.png)
1、原始流Stream的用法
![](https://img.haomeiwen.com/i14489729/691a4a2d8ee308bd.png)
(1)forEach
作用:遍历流中的每个数据
System.out.println("stream遍历结果:");
list.stream().forEach(item -> System.out.println(item));
输出结果:
![](https://img.haomeiwen.com/i14489729/c6b513a21672c70a.png)
(2)map
作用:映射每个元素到对应的结果
List addOneList = list.stream().map(i -> i +"1").distinct().collect(Collectors.toList());
System.out.println("每个元素都拼接'1'的结果:" + JSON.toJSONString(addOneList));
输出结果:
![](https://img.haomeiwen.com/i14489729/29084cedffe56079.png)
(3)limit
作用:获取指定数量的流
List limitList = list.stream().limit(3).collect(Collectors.toList());
System.out.println("获取指定数量的流的结果:" + JSON.toJSONString(limitList));
输出结果:
![](https://img.haomeiwen.com/i14489729/1df49f259cff1d83.png)
(4)sort
作用:对流进行排序
排序步骤:
A、先要将排序列表中的实体实现Comparable接口,并重写compareTo方法。要按哪个字段排序,重写compareTo方法时就处理哪个字段
![](https://img.haomeiwen.com/i14489729/24e40cc4df736752.png)
B、使用sort()方法进行排序
/*********************** 未排序的结果 *************************/
System.out.println("未排序的结果:");
System.out.println(JSON.toJSONString(list1));
/*********************** 按岁数升序排序的结果 *************************/
List sortedList = list1.stream().sorted(Comparator.comparing(TestUser::getAge)).collect(Collectors.toList());
System.out.println("按岁数升序排序的结果-stream.sort方式:");
System.out.println(JSON.toJSONString(sortedList));
/*********************** 按岁数降序排序的结果 *************************/
List reverseSortedList = list1.stream().sorted(Comparator.comparing(TestUser::getAge).reversed()).collect(Collectors.toList());
System.out.println("按岁数降序排序的结果-stream.sort方式:");
System.out.println(JSON.toJSONString(reverseSortedList));
输出结果:
![](https://img.haomeiwen.com/i14489729/912c0480c38f25e1.png)
Collections.sort()与stream().sort()排序的异同
相同之处:
Collections.sort()方法同样都要先将排序列表中的实体实现Comparable接口,并重写compareTo方法
不同之处:
对于相同的compareTo逻辑,stream().sort()方式与Collections.sort()方式顺序相反
/*********************** 按岁数降序排序的结果 *************************/
Collections.sort(list1);
System.out.println("按岁数降序排序的结果-Collections.sort方式:");
System.out.println(JSON.toJSONString(list1));
//Collections.reverse()方法可以将当前的列表倒序排列
Collections.reverse(list1);
/*********************** 按岁数升序排序的结果 *************************/
System.out.println("按岁数升序排序的结果-Collections.sort方式:");
System.out.println(JSON.toJSONString(list1));
输出结果:
![](https://img.haomeiwen.com/i14489729/3c76839a9e08d10b.png)
(5)filter
作用:通过设置的条件过滤出元素,注意:满足条件的会被保留(与Collection.removeIf()方法相反)
Stream stream1 = list1.stream().filter(item ->"wangwu".equals(item.getName()));
List filterList = stream1.collect(Collectors.toList());
System.out.println("filter过滤后的结果:" + JSON.toJSONString(filterList));
![](https://img.haomeiwen.com/i14489729/25e3e73356064a5c.png)
注意:stream().filter()与Collection.removeIf()方法的区别
filter:满足条件的会被保留
removeIf:满足条件的会被去掉
list1.removeIf(item -> "wangwu".equals(item.getName()));
System.out.println("removeIf过滤后的结果:" + JSON.toJSONString(list1));
输出结果:
![](https://img.haomeiwen.com/i14489729/9f5c88e8d81171ad.png)
网友评论