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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值