Java8Stream流复习和api总结
构建方式
list.stream();
Stream.of(list);
基础常用API
Stream<Number> stream = list.stream();
//获取最大值
stream.max(比较器);
//获取最小值
stream.min(比较器);
//排序(只是对流中的数据排序,对源集合的顺序没有影响)
stream.sorted(比较器);
//过滤
stream.filter(n -> n.getId() > 3);
//遍历
stream.forEach(System.out::println);
缩减操作
T reduce(T identity, BinaryOperator<T> accumulator);//1
Optional<T> reduce(BinaryOperator<T> accumulator);//2
对于identity参数,表示的是运算的初始值以及如果是空流返回的默认值,如果流不为空,identity与流中的第一个元素进行运算,返回的结果再与第二个元素运算,以此类推。而第二个方法没有这个参数,说明是直接从流的前两个元素开始运算。
举例:
Optional<Integer> sum = lists.stream().reduce((a, b) -> a + b);
if (sum.isPresent()) System.out.println("list的总和为:" + sum.get());
//<====> lists.stream().reduce((a, b) -> a + b).ifPresent(System.out::println);
Integer sum2 = lists.stream().reduce(0, (a, b) -> a + b);//21
System.out.println("list的总和为:" + sum2);
并行流
多个线程对流中的数据进行处理,所以处理速度很快,但是最后流中元素的顺序可能是乱序。
所以当对集合顺序没有要求的时候使用并行流或者使用完并行流之后再需要再排一次序
构建并行流的两种方式:
//直接将集合转换为并行流
list.parallelStream();
//将顺序流转换为并行流
Stream<Integer> parallel = list.stream().parallel();
//并行流转换为顺序流
Stream<Integer> sequential = parallel.sequential();
并行流中的reduce方法
public interface Stream<T> extends BaseStream<T, Stream<T>> {
//、、、忽略其他无关紧要的元素
<U> U reduce(U identity,
BiFunction<U, ? super T, U> accumulator,
BinaryOperator<U> combiner);
}
在reduce()的这个版本当中,accumulator被称为累加器, combiner被称为合成器, combiner定义的函数将accumulator提到的两个值合并起来
后续待更新