我能用一个lambda表达式完成所有逻辑吗?
boolean isTrue = myList.stream().anyMatch( m -> m.getName().equals("a") );
if (isTrue) { do something }
else { do other thing }
public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
而且,你可以使用filter(<<yourCondition>>).findAny()
代替返回布尔值的anyMatch(<<yourCondition>>)
。filter()方法返回了Optional类型。
因此,你可以结合它们并编写像下面这样的代码。yourStream
.filter(m -> m.getName().equals("a")) //your condition
.findAny() //returns Optional
.ifPresentOrElse(
// action when value exists
value -> System.out.println("There was a value "+value),
// action when there was no value
() -> System.out.println("No value found")
);
anyMatch
有什么关系,因为它返回一个布尔值。此外,这也不会比一个简单的if(myList.stream().anyMatch(m -> m.getName().equals("a"))) { do something } else { do something other }
更好。 - HolgeranyMatch
返回布尔值,我怀疑它只是作为一个例子使用,主要问题/意图更多地是“如何用流/lambda表达if(valueInStream){ handleValue } else { doSomethingElse }
?”我不反对if(myList.stream().anyMatch(m -> m.getName().equals("a"))) { do something } else { do something other }
更简单,但在流更复杂的情况下,以.ifPresentOrElse(MyClass::handleValue, MyClass::handleLackOfValue)
结束也是合理的。 - Pshemo.findAny().ifPresentOrElse(...)
是一个合理的选择。但是,问题的示例选择可能不佳。 - Holger
anyMatch()
返回一个原始的boolean
,因此您显然无法继续使用 lambda 表达式。 - Samuel Philippboolean
值(如Stream.anyMatch()
所需)之前,按元素执行几乎任何你想要的操作。anyMatch()
的最终结果必然超出作为其参数传递的 lambda 函数的范围。 - John Bollinger