终止操作是流操作的最后一步,只有当终止操作出现的时候,其他中间操作才会真正被执行。有如下一些终止操作:
该部分属于查找与匹配
allMatch(Predicate p) :检查是否匹配所有元素
anyMatch(Predicate p) :检查是否至少匹配一个元素
noneMatch(Predicate p) :检查是否没有匹配所有元素
findFirst() :返回第一个元素
findAny() :返回当前流中的任意元素
该部分属于统计
count() :返回流中元素总数
max(Comparator c) :返回流中最大值
min(Comparator c) :返回流中最小值
forEach(Consumer c) 内部迭代(使用 Collection 接口需要用户去做迭代,称为外部迭代。相反,Stream API 使用内部迭代——它帮你把迭代做了)
终端操作会从流的流水线生成结果。其结果可以是任何不是流的值,例如:List、Integer,甚至是 void 。
拿count举例:
@Test
public void test4() {
//flatMap类型:将为每个元素创建一个流,并最终合并成一个流
List<List> lp = new ArrayList();
for(int i=0;i<3;i++) {
List<Double> lc = new ArrayList();
for(int j=0;j<10;j++) {
lc.add(Math.random());
}
lp.add(lc);
}
System.out.println(lp.stream().flatMap((x)->x.stream()).count());
//lp.stream().flatMap((x)->x.stream()).forEach(System.out::println);
}