核心内容摘要
17.CC.CCC
文章目录
Java Stream API - 短路操作✅ 什么是短路操作 重要概念✅ 短路操作示例 findFirst() 和 findAny() 示例输出 anyMatch()、allMatch() 和 noneMatch() 示例输出✅ 非短路操作示例输出 解释✅ 短路操作的优势
总结
Java Stream API - 短路操作在使用Java Stream API 时你可能会发现一些操作不需要处理流中的所有元素即可返回结果。
与之相对的是一些操作它们需要消耗所有元素才能得到最终结果。
本文将介绍短路操作及其工作原理。
✅ 什么是短路操作在Stream API中一些终止操作可以在某个条件满足时提前停止数据的处理这就是所谓的短路操作。
这些操作会尽早返回结果而不需要遍历流中的所有元素。
重要概念短路操作在找到符合条件的元素后流的处理过程会被中断不再继续处理剩余的元素。
非短路操作必须处理所有元素才能得到最终结果的操作。
✅ 短路操作示例findFirst()和findAny()示例这两个方法会在找到第一个符合条件的元素后停止处理流中的剩余元素。
CollectionStringstringsList.of(one,two,three,four,five);StringfirstMatchstrings.stream().filter(s-s.length()
// 查找长度为3的第一个字符串.findFirst()// 只会处理到第一个匹配的元素.orElse(Not Found);System.out.println(First Match: firstMatch);输出FirstMatch:one在这个例子中findFirst()方法在找到one后就停止了对流的处理不再继续查找其他元素。
anyMatch()、allMatch()和noneMatch()示例这三个方法也具有短路特性。
anyMatch()会在找到一个符合条件的元素时返回trueallMatch()会在遇到第一个不符合条件的元素时返回falsenoneMatch()会在找到第一个符合条件的元素时返回false。
CollectionStringstringsList.of(one,two,three,four,five);booleanhasLengthThreestrings.stream().anyMatch(s-s.length()
;// 查找是否有长度为3的字符串booleanallLengthGreaterThanTwostrings.stream().allMatch(s-s.length()
;// 检查是否所有字符串的长度都大于2booleannoneLengthGreaterThanTenstrings.stream().noneMatch(s-s.length()
;// 检查是否没有字符串的长度大于10System.out.println(Has Length 3: hasLengthThree);System.out.println(All Length 2: allLengthGreaterThanTwo);System.out.println(None Length 10: noneLengthGreaterThanTen);输出HasLength3:trueAllLength2:trueNoneLength10:trueanyMatch()方法在找到第一个符合条件的元素后立即停止遍历返回true。
allMatch()方法会遍历整个流直到找出第一个不符合条件的元素为止如果没有才会返回true。
noneMatch()方法与allMatch()类似但它是检查是否没有元素符合给定条件。
✅ 非短路操作示例一些操作必须遍历整个流才能返回最终结果。
例如count()计算流中的元素数量必须遍历整个流。
max()和min()找出流中的最大值或最小值同样需要遍历所有元素。
forEach()遍历流中的每个元素执行某些操作。
CollectionStringstringsList.of(one,two,three,four,five);longcountstrings.stream().filter(s-s.length()
// 过滤长度大于3的字符串.count();// 需要处理所有符合条件的元素才能返回结果System.out.println(Count of strings with length 3: count);输出Countof stringswithlength3:2 解释count()方法必须遍历整个流以确定符合条件的元素数量因此它是一个非短路操作。
✅ 短路操作的优势短路操作的优势在于性能提升如果你只关心是否存在某个元素短路操作可以节省大量计算时间。
减少不必要的处理一旦找到了符合条件的元素流会停止处理剩余的元素从而避免了不必要的计算。
例如在寻找某个特定元素时使用findFirst()或anyMatch()能够显著提升性能因为一旦找到了目标元素流就会停止遍历。