Java8新特性探索之Stream接口 (3)

allMatch(Predicate) :如果流的每个元素提供给 Predicate 都返回 true ,结果返回为 true。在第一个 false 时,则停止执行计算。

// 数组中第一个元素小于2,则停止匹配返回结果:flase System.out.println(Stream.of(1, 2, 3, 4, 5).allMatch(n -> n > 2)); // 数组中所有元素都大于0,则停止匹配返回结果:true System.out.println(Stream.of(1, 2, 3, 4, 5).allMatch(n -> n > 0));

anyMatch(Predicate):如果流的任意一个元素提供给 Predicate 返回 true ,结果返回为 true。在第一个 true 是停止执行计算。

// 数组中第三个元素大于2,则停止匹配返回结果:true System.out.println(Stream.of(1, 2, 3, 4, 5).anyMatch(n -> n > 2));

noneMatch(Predicate):如果流的每个元素提供给 Predicate 都返回 false 时,结果返回为 true。在第一个 true 时停止执行计算。

// 数组中第三个元素大于2,则停止匹配返回结果:true System.out.println(Stream.of(1, 2, 3, 4, 5).noneMatch(n -> n > 2));

6、流中元素查找

findFirst():返回第一个流元素的 Optional,如果流为空返回 Optional.empty

// 根据条件过滤后取第一个元素 System.out.println(Stream.of(1, 2, 3, 4, 5).filter(n -> n > 2).findFirst().get());

findAny():返回含有任意流元素的 Optional,如果流为空返回 Optional.empty

// 根据条件过滤后找到任何一个所匹配的元素,就返回,此方法在对流并行执行时效率高 System.out.println(Stream.of(1, 2, 3, 4, 5).parallel().filter(n -> n > 2).findAny().get());

7、收集流信息

count():流中的元素个数。

max(Comparator):根据所传入的 Comparator 所决定的“最大”元素。

min(Comparator):根据所传入的 Comparator 所决定的“最小”元素。

average() :求取流元素平均值。

sum():对所有流元素进行求和。

summaryStatistics():生成有关此流元素的各种摘要数据。

// 获取流中元素数量,返回结果:5 System.out.println(Stream.of(1,2,3,4,5).count()); // 获取流中最大值,返回结果:5 System.out.println(Stream.of(1,2,3,4,5).max(Integer::compareTo).get()); // 获取流中最小值,返回结果:1 System.out.println(Stream.of(1,2,3,4,5).min(Integer::compareTo).get()); // 获取流中元素平均值,返回结果:3.0 System.out.println(Stream.of(1,2,3,4,5).mapToInt(Integer::intValue).average().getAsDouble()); // 获取流中各种摘要数据,返回结果:IntSummaryStatistics{count=5, sum=15, min=1, average=3.000000, max=5} System.out.println(Stream.of(1,2,3,4,5).mapToInt(Integer::intValue).summaryStatistics()); // 获取流中元素总和,返回结果:15 System.out.println(Stream.of(1,2,3,4,5).mapToInt(Integer::intValue).sum());

三、总结

流式操作改变并极大地提升了 Java 语言的可编程性,并可能极大地阻止了 Java 编程人员向诸如 Scala 这种函数式语言的流转。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfddd.html