Java Lambda-如果有匹配的,做点什么,或者我们也做点什么
我可以用一个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() 所以你可以像
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(…)
是一个合理的选择。但是,这个问题的例子选择得很糟糕。