1.6 简单简化
现在你已经知道了如何创建并转换一个流,我们最终也是最重要的一点就是从流的数据中得到我们想要得到的。我们在本节中介绍的方法就是简化。简化是终端的操作,它将流减少为非流值直到可以在程序中被使用。
你早已见到流的简化:count()方法返回了流中元素的数量。
其他的简化有 max() 和 min() 方法,它们返回流中最大值或者是最小值。有一种说法-这些方法返回一个Optional 1
2Optional<String> largest = words.max(String::compareToIgnoreCase);
System.out.println("largest: " + largest.orElse(""));
findFirst() 返回非空集合中的第一个值。 与过滤器结合使用时通常很有用。 例如,在这里找到以字母Q开头的第一个单词(如果存在):1
2Optional<String> startsWithQ
= words.filter(s -> s.startsWith("Q")).findFirst();
如果你需要匹配任何位置的元素,而不仅是匹配第一个元素,请使用findAny方法。 当并行化流时,此方法很有效,因为该流可以报告它找到的任何匹配项,而不必局限于第一个匹配项。1
2Optional<String> startsWithQ
= words.parallel().filter(s -> s.startsWith("Q")).findAny();
如果您只是想知道是否有匹配项,请使用anyMatch()。 该方法带有 predicate 参数,因此您无需使用filter。1
2boolean aWordStartsWithQ
= words.parallel().anyMatch(s -> s.startsWith("Q"));
如果所有元素都不匹配 predicate,则有allMatch()和noneMatch()返回true。 这些方法还受益于并行运行。
1 | java.util.stream.Stream 8 |