Java8中Stream进阶

参考: https://zhuanlan.zhihu.com/p/47478339

官方将 Stream 中的操作分为两大类:终结操作(Terminal operations)和中间操作(Intermediate operations)。

中间操作(Intermediate operations): 会返回一个新的流交给下一个操作使用.
中间操作又分为:
Stateless(无状态): 元素处理不受之前元素影响 例如:filter(),map(),mapToInt(),mapToLong(),mapToDouble(),peek()等
Stateful(有状态): 该操作只有拿到所有元素之后才能继续下去 例如: distinct(),sorted(),limit(),skip()等

终结操作(Terminal operations): 是指返回最终的结果。终结操作返回的就不是流了,没办法直接交给下一个操作了.
终结操作又分为:
短路操作(short-circuiting):指必须处理所有元素才能得到最终结果;例如: anyMatch(),allMatch(),noneMatch(),findFirst(),findAny()
非短路操作:指遇到某些符合条件的元素就可以得到最终结果; 例如: forEach(),forEachOrdered(),toArray(),reduce(),collect(),max(),min(),count();

Stream 是怎么实现的?
我们先看如何产生一个流,Collection对象
在Collection的源码中有

default Stream<E> stream() {
    
    
    return StreamSupport.stream(spliterator(), false);
}

由Map产生的流也是通过Collection.stream()产生的
然后就看数组

 String[] array = {
    
     "张无忌", "张翠山", "张三丰", "张一元" };
 Stream<String> stream = Stream.of(array);

最终都是先被整成可分割迭代器(Spliterator)然后再被放入 StreamSupport.stream(var,false)中;

Stream太难搞了,直接搞定面试官可能更简单点, 面试之前这些好好看看 应该问题不大
从零开始实现stream流 https://www.cnblogs.com/xiaoxiongcanguan/p/10511233.html
Java8中创建Stream流有哪几种方式? https://zhuanlan.zhihu.com/p/143670117
java8的stream api是迭代一次还是迭代多次? https://developer.51cto.com/art/202110/687062.htm
Java 8中用法优雅的Stream,性能也"优雅"吗? https://zhuanlan.zhihu.com/p/59966937
详解Stream流思想,别到面试时着急 https://blog.51cto.com/u_14954398/2568619
Java8新特性Stream详细教程 https://www.javazhiyin.com/73111.html

Guess you like

Origin blog.csdn.net/xy3233/article/details/121167127