Java Lambda-如果有匹配的,做点什么,或者我们也做点什么

Java Lambda-如果有匹配的,做点什么,或者我们也做点什么,java,lambda,java-8,Java,Lambda,Java 8,我可以用一个lambda表达式来实现所有逻辑吗 boolean isTrue = myList.stream().anyMatch(m -> m.getName().equals("a"); if(isTrue) { do something } else { do something } 由于添加了Java 9可选的类 也可以使用返回布尔值的anyMatch(..)来代替anyMatch(..),而使用返回可选值的过滤器(..).findAny() 所以你可以像

我可以用一个lambda表达式来实现所有逻辑吗

boolean isTrue = myList.stream().anyMatch(m -> m.getName().equals("a");         

if(isTrue) { do something } 
else { do something }

由于添加了Java 9
可选的

也可以使用返回
布尔值的
anyMatch(..)
来代替
anyMatch(..)
,而使用返回
可选值的
过滤器(..).findAny()

所以你可以像这样写代码

yourStream
    .filter(..)
    .findAny() //returns Optional
    .ifPresentOrElse(
        // action when value exists 
        value -> System.out.println("There was a value "+value),
        // action when there is no value
        () -> System.out.println("No value found")
    );

您提供的代码甚至没有编译。除此之外,还不清楚你想要达到什么目标。我想知道,在任何一场比赛之后,我可以继续使用lamda的表达方式吗。比如list.stream(),anyMatch(true).do(dosomething.orElse(dosomething)
anyMatch()
返回一个原语
boolean
,因此显然不能继续lambda表达式。可以使用
过滤器(e->/*条件*/).findAny().ifPresent(e->/*消费者*/)
来欺骗用户。但是,没有
orElse
。lambda在返回
boolean
(如
Stream.anyMatch()
所需)之前,几乎可以执行您希望它执行的任何操作(基于每个元素)。
anyMatch()
本身的最终结果必然超出作为其参数传递的lambda的范围。我不知道这与返回
布尔值的
anyMatch
有什么关系。此外,如果(myList.stream().anyMatch(m->m.getName().equals(“a”)){do something}或者{do something}
,它也不会比简单的
有所改进。@Holger我试图澄清一下我的答案。无论如何,因为正如您所提到的
anyMatch
返回布尔值,我怀疑它只是用作示例,主要问题/意图更多地是“如何用stream/lambda表示
if(valueInStream){handleValue}else{doSomethingElse}
?”。我不能不同意
if(myList.stream().anyMatch(m->m.getName().equals(“a”)){do something}或者{do something other}
更简单,但是在流更复杂的情况下,以
结尾。ifpresentorese(MyClass::handleValue,MyClass::handleackofvalue)
也可能是合理的。是的,如果需要这个值,
.findAny().ifPresentOrElse(…)
是一个合理的选择。但是,这个问题的例子选择得很糟糕。