一、R collect(Supplier supplier, BiConsumer accumulator, BiConsumer combiner)
supplier:一个能创造目标类型实例的方法。
accumulator:一个将当元素添加到目标中的方法。
combiner:一个将中间状态的多个结果整合到一起的方法(并发的时候会用到)
List result = stream.collect(() -> new ArrayList<>(), (list, item) -> list.add(item), (one, two) -> one.addAll(two));
二、R collect(Collector collector)
Collector其实是上面supplier、accumulator、combiner的聚合体。那么上面代码就变成:
List list= Stream.of(1, 2, 3, 4).filter(p -> p > 2).collect(Collectors.toList());
三、collector
Collector是Stream的可变减少操作接口,Collectors(类收集器)提供了许多常见的可变减少操作的实现。
四、创建Collector
转换成其他集合:toList、toSet、toCollection、toMap
List collectList = Stream.of(1, 2, 3, 4)
.collect(Collectors.toList());
System.out.println("collectList: " +collectList);//打印结果//collectList: [1, 2, 3, 4]
转成值:
使用collect可以将Stream转换成值。maxBy和minBy允许用户按照某个特定的顺序生成一个值。
averagingDouble:求平均值,Stream的元素类型为double
averagingInt:求平均值,Stream的元素类型为int
averagingLong:求平均值,Stream的元素类型为long
counting:Stream的元素个数
maxBy:在指定条件下的,Stream的最大元素
minBy:在指定条件下的,Stream的最小元素
reducing: reduce操作
summarizingDouble:统计Stream的数据(double)状态,其中包括count,min,max,sum和平均。
summarizingInt:统计Stream的数据(int)状态,其中包括count,min,max,sum和平均。
summarizingLong:统计Stream的数据(long)状态,其中包括count,min,max,sum和平均。
summingDouble:求和,Stream的元素类型为double
summingInt:求和,Stream的元素类型为int
summingLong:求和,Stream的元素类型为long
Optional collectMaxBy = Stream.of(1, 2, 3, 4)
.collect(Collectors.maxBy(Comparator.comparingInt(o->o)));
System.out.println("collectMaxBy:" +collectMaxBy.get());//打印结果//collectMaxBy:4
分割数据块:Collectors.partitioningBy
Map> collectParti = Stream.of(1, 2, 3, 4)
.collect(Collectors.partitioningBy(it-> it % 2 == 0));
System.out.println("collectParti : " +collectParti);//打印结果//collectParti : {false=[1, 3], true=[2, 4]}
数据分组:Collectors.groupingBy
Map> collectGroup= Stream.of(1, 2, 3, 4)
.collect(Collectors.groupingBy(it-> it > 3));
System.out.println("collectGroup : " +collectGroup);//打印结果//collectGroup : {false=[1, 2, 3], true=[4]}
字符串:Collectors.joining
String strJoin = Stream.of("1", "2", "3", "4")
.collect(Collectors.joining(",", "[", "]"));
System.out.println("strJoin: " +strJoin);//打印结果//strJoin: [1,2,3,4]