短路终端操作
Stream
无状态:指元素的处理不受之前元素的影响;
有状态:指该操作只有拿到所有元素之后才能继续下去。
非短路操作:指必须处理所有元素才能得到最终结果;
短路操作:指遇到某些符合条件的元素就可以得到最终结果,如 A || B,只要A为true,则无需判断B的结果。
allMatch、anyMatch、noneMatch
allMatch
:Stream
中全部元素符合传入的predicate
返回 true
anyMatch
:Stream
中只要有一个元素符合传入的predicate
返回 true
noneMatch:
Stream中没有一个元素符合传入的
predicate`返回 true
List<String> list = new ArrayList<String>();
list.add("123e");
list.add("w213");
list.add("q213");
list.add("w2qr");
list.add("2131");
Boolean bl = list.stream().anyMatch(x->x.length()==4);
Boolean bl1 = list.stream().noneMatch(x->x.length()==4);
Boolean bl2 = list.stream().allMatch(x->x.length()==4);
System.out.println(bl);
System.out.println(bl1);
System.out.println(bl2);
true
false
true
findFirst 与findAny:
findAny :
返回的元素是不确定的,对于同一个列表多次调用findAny()有可能会返回不同的值。使用findAny()是为了更高效的性能。如果是数据较少,串行地情况下,一般会返回第一个结果,如果是并行的情况,那就不能确保是第一个
findFirst :
返回列表中的第一个元素。
//随机数,并行的情况下随机的,串行的情况下也一直是0
System.out.println(IntStream.range(0, 100).parallel().findAny());
//返回的一直是0
System.out.println(IntStream.range(0, 100).parallel().findFirst());
寄语: