抓紧时间
的”‘趁现在‘方法打开Java流API用于根据指定的条件从流中提取元素。的”抓紧时间’当我们希望限制从流的开头开始获取的元素直到某个条件变为假时,这种方法特别有用。
签名:stream《T》take while(谓词《?超级T》谓词)
例子:
List<Integer> numbers = List.of(1,2,3,4,5,6,7,8);
numbers.stream()
.takeWhile(x -> x < 5)
.forEach(System.out :: println); # 1234
下降时间
的”“dropWhile”正好与‘抓紧时间方法下降时间方法返回一个流,该流由满足给定谓词的元素的最长前缀删除后的剩余元素组成。
签名: Stream dropWhile(Predicate<? super T> predicate)
例子:
private static void dropWhileDemo(){
List<Integer> numbers = List.of(1,2,3,4,5,6,7,8);
numbers.stream()
.dropWhile(x -> x < 5)
.forEach(System.out :: print);
}
#5678
何时使用它们:
拍摄时:
'使用’抓紧时间当您希望在满足特定条件的情况下从流的开头提取元素时。这对于创建满足特定标准的元素子集非常有用。
DropWhile:
'使用’下降时间当您想从流的开始处跳过元素直到某个条件为假时。当您想根据条件排除元素前缀时,这很方便。
传统的For循环和“takeWhile”示例
假设我们有一个整数列表,您想使用传统的for循环查找并打印所有元素,直到满足某个条件。
List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8);
int condition = 5;
for (int number : numbers) {
if (number < condition) {
System.out.print(number);
} else {
break;
}
}
让我们使用“takeWhile”方法获得相同的结果。
List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8);
int condition = 5;
numbers.stream()
.takeWhile(num -> num < condition)
.forEach(System.out :: print);
传统For循环和“dropWhile”示例
List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8);
int condition = 5;
for (int number : numbers) {
if (number > condition) {
System.out.print(number);
}
continue;
}
让我们使用“dropWhile”方法获得相同的结果。
numbers.stream()
.dropWhile(x -> x <= condition)
.forEach(System.out :: print);
要点
一旦不再满足谓词条件,这两种方法都会停止处理。这可以提高效率,尤其是对于大型集合或无限流。
如果第一个元素已经不符合谓词,抓紧时间返回一个空集合. 下降时间如果所有元素都满足谓词,则返回一个空集合。
结果集合中的元素顺序保留在原始集合中。
我们可以将“takeWhile”和“dropWhile”函数与“limit”函数结合使用,以进一步控制处理的元素数量。takeWhile和limit:假设我们有一个数字列表,提取直到满足某个特定条件,并将结果限制为特定的计数。dropWhile和极限:跳过数字,直到满足特定条件,并将结果限制为特定计数。
List<Integer> numbers = List.of(1,2,3,4,5,6,7,8,9);
List<Integer> takeWhileAndLimit = numbers.stream()
.takeWhile(x -> x < 6)
.limit(3)
.collect(Collectors.toList());
System.out.println("TakeWhile and Limit: " + takeWhileAndLimit);
// Using dropWhile and limit
List<Integer> dropWhileAndLimit = numbers.stream()
.dropWhile(x -> x < 6)
.limit(3)
.collect(Collectors.toList());
System.out.println("DropWhile and Limit: " + dropWhileAndLimit);
# TakeWhile and Limit: [1, 2, 3]
# DropWhile and Limit: [6, 7, 8]
两者的通用用例“takeWhile”和“dropWhile”
-过滤和转换数据
-高效处理大型或潜在的无限流
-解析和验证
-特定领域使用案例,例如获取数据库记录直到满足某个条件。
“takeWhile”和“dropWhile”的主要优势
简洁和可读性:用takeWhile和dropWhile替换传统循环简化了代码并提高了可读性。侧重于过滤的目的而不是循环机制。
函数式编程风格:与对齐函数式编程通过强调不可变集合和纯函数,它还促进了使用集合时代码的可组合性和可重用性。
效率:一旦不再满足谓词条件,这两种方法都会停止处理