java - 如何使用 lambda 表达式从 forEach 方法中中断[重复]

Posted

技术标签:

【中文标题】java - 如何使用 lambda 表达式从 forEach 方法中中断[重复]【英文标题】:java - how to break from a forEach method using lambda expression [duplicate] 【发布时间】:2018-09-29 13:57:04 【问题描述】:

基本上我有一个列表,它的元素将被一一处理,直到满足某些条件。如果任何元素满足该条件,则应返回true,否则返回false。方法如下:

public boolean method(List<Integer> data) 
    data.forEach(item -> 
        if (some condition is met) 
            return true; //  Getting Unexpected return value here
        
    );
    return false;

有没有办法在满足条件后立即跳出这个 forEach 循环,而不是遍历所有元素?

【问题讨论】:

看起来像Stream#anyMatch?或者这对你怎么不起作用? 不,但你可以使用 for 循环 @UnholySheep 这是正确的方法。您应该提供该建议的答案... “但我想知道是否有办法摆脱 forEach 循环。” => 不,没有。为什么要这样做?有(更好的)方法可以做到这一点。 forEach 只是按照它所说的去做:它为每个元素执行一个动作,而不是更少。 @Eugene 是的,这就是为什么我什至不会告诉别人(尤其是初学者)有这种可能性。除此之外,它不仅丑陋,而且使用了一种并非为此目的而设计的机制。 【参考方案1】:
data.stream().anyMatch(item -> condition)

【讨论】:

我不认为这是正确的。如果condition 不是一个表达式,而是一组计算呢?

以上是关于java - 如何使用 lambda 表达式从 forEach 方法中中断[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如果使用我的服务使用Java 8 lambda / streams列表不为空,如何从列表中删除每个元素

委托与匿名委托

Java8新特性-Lambda表达式

Java 8新特性:学习如何使用Lambda表达式,一看必懂

Lambda 到表达式树的转换

如何在横函数中添加lambda表达式?