一. 基本概念
1.1 什么是流
不是集合,不是数据结构,不保存数据,它类似于 Iterator,对数据进行并行或者串行遍历,然后对数据进行一系列计算、过滤等操作,最终得到结果。
1.2 为什么加入集合的流式操作
-
更容易对集合进行一系列的操作:如过滤、转换、统计等
-
可以并行的对集合进行操作,速度更快
-
配合lambda使用可读性更强,代码更加简洁
二. 集合操作分类:中间操作 和 最终操作
2.1 中间操作( intermediate,可以连续多个 )
filter(): 对元素进行过滤
sorted():对元素排序
map():元素映射
distinct():去除重复的元素
List<Integer> list = Arrays.asList(new Integer[]{1,2,3,5,7,8,10,10}) ; // List<Integer> list2 = list.stream().filter((k)-> k%2==0).collect(Collectors.toList()); //集合数据按照条件进行过滤,不符合条件的直接扔掉 list.stream().filter((k)-> k%2==0).forEach(System.out::println ); //对数据进行排序,也可以使用 lambda自定义函数排序 list.stream().sorted().forEach(System.out::println ); //对所有数据进行统一的计算,得到一个新的集合 list.stream().map( k->k+10 ).forEach(System.out::println ); //对集合中数据 去重 list.stream().distinct( ).forEach(System.out::println );
2.2 最终操作( terminal ,只能有一个)
-
forEach():遍历每个元素。
-
reduce():把Stream 元素数据整合然后统计。例如,字符串拼接,数值的 sum,min,max ,average 都是特殊的 reduce。
-
collect():返回一个新的集合。
-
min():找到最小值。
-
max():找到最大值。
三、函数操作实例
3.1 构建stream对象
// 1. Individual values Stream stream = Stream.of("a", "b", "c"); // 2. Arrays String [] strArray = new String[] {"a", "b", "c"}; stream = Stream.of(strArray); stream = Arrays.stream(strArray); // 3. Collections List<String> list = Arrays.asList(strArray); stream = list.stream();
3.2 基础的操作实例
List<Integer> list = Arrays.asList(new Integer[]{1,2,3,5,7,8,10,10}) ; // List<Integer> list2 = list.stream().filter((k)-> k%2==0).collect(Collectors.toList()); //对集合数据进行 加减乘,得到最后的结果 Integer result = list.stream().reduce((a,b)->a+b ).get(); System.out.println( result ); //返回集合set HashSet<Integer> set1 = list.stream().collect( Collectors.toCollection( ( )->{return new HashSet<>(); }) ); System.out.println( set1 ); //获取列表中的最大值 Integer maxVal = list.stream().max((x,y)->{ return x>y?1:-1; }).get(); System.out.println( maxVal );
四、参考