Optional
对象中 , 那么我们可以通过类似x -> Optional.of(result)
这样的方法将其封装 , 但是 , 如果这么做了就一定要清楚我们该如何获取这样的流中的对象 。请牢记 , 要先验证是否存在 , 才能获取
Stream.filter(Optional::isPresent).map(Optional::get)// 到这里 , 流中的数据就都是Optional对象中包含的值了// 继续处理
4、终结操作这些操作接受一个流作为参数 , 并生成一个最终结果而非返回那个流 , 因此 , 只要调用这些方法 , 流处理就将终结
- 将流转化为一个数组
toArray()
toArray(generator)
该方法会将元素保存在generator中 , 而不是创建一个新的并返回
- 在每个流元素上应用某个终结操作
forEach(Consumer)
在每个元素上调用Consumer方法forEachOrdered(Consumer)
该版本确保对元素的操作顺序是原始的流顺序
- 收集操作
collect(Collector)
相当复杂的一个方法 , 可以将所有元素存入我们给出的Collector容器中 。
- 本方法主要复杂在 , 我们实际上可以使用
java.util.stream.Collectors
文档中相当多的对象 , 而且其中有一部分很复杂比如如果我们希望放入一个TreeSet
中使它们总是有序 , 那么我们可以使用Collectors.toCollection(TreeSet::new)
来创建该容器并应用
- 本方法主要复杂在 , 我们实际上可以使用
collect(Supplier, BiConsumer, BiConsumer)
- 在极小情况下 , 我们无法从
Collectors
类中找到我们想要的处理容器 , 那么就需要第二个方法
- 在极小情况下 , 我们无法从
- 组合所有的流元素
reduce(BinaryOperator)
组合所有元素 , 组合的方法就是参数方法reduce(identity, BinaryOperator)
以identity为初始值组合所有元素 , 方法为第二个参数reduce(identity, BiFunction, BinaryOperator)
复杂 , 未作介绍
- 匹配 , 都是根据Predicate返回一个布尔值
allMatch(Predicate)
anyMatch(Predicate)
noneMatch(Predicate)
- 选择一个元素
findFirst()
返回一个包含流中第一个元素的Optional
对象 , 若流中没有元素即返回Optional.empty
findAny()
返回一个包含流中任意一个元素的Optional
对象 , 若流中没有元素则为Optional.empty
- 不过需要注意的是 , 该方法对于非并行的流似乎总是会选择流中的第一个元素 , 如果是并行的则随机
- 获取流相关的信息
count()
计算流中元素数量max(Comparator)
通过Comaprator获取流中最大的元素min(Comparator)
通过Comparator获取流中最小的元素- 如果是数值化的流 , 除了上面这些 , 还有以下方法
average()
获得平均值sum()
获得累加值summaryStatics()
返回可能有用的摘要数据 , 基本没什么用
经验总结扩展阅读
- 2022,一个Java程序猿的外设配置
- 2022,一个Java程序猿的装机配置
- Java 多线程写zip文件遇到的错误 write beyond end of stream!
- 1 JAVA语言学习-面向对象
- 函谷关在哪里
- Java 19 新功能介绍
- Java线程未捕获异常处理 UncaughtExceptionHandler
- 死磕面试系列,Java到底是值传递还是引用传递?
- 【Java复健指南09】项目练习全解--房屋出租系统
- Java集合精选常见面试题