探索Java中的TakeWhile和DropWhile函数

抓紧时间
的”‘趁现在‘方法打开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替换传统循环简化了代码并提高了可读性。侧重于过滤的目的而不是循环机制。
函数式编程风格:与对齐函数式编程通过强调不可变集合和纯函数,它还促进了使用集合时代码的可组合性和可重用性。
效率:一旦不再满足谓词条件,这两种方法都会停止处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小徐博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值