我想做这样的事情:
{ param -> if ( <condition over param> ) process ( param ) } ( provider () );
Run Code Online (Sandbox Code Playgroud)
即, param 是一个方法返回的值(比方说,它需要很长时间才能运行,所以我只想调用它一次)并且我只想在它满足条件时传递这样的值。
替代方案是:
Param param = provider(); if ( <cond> ) process ( param );
Run Code Online (Sandbox Code Playgroud)
但是基于 lambda 的版本,如果我能让它工作的话,会更短。上面的代码不能用 Java 编译,我不知道我在想什么是可能的,以及如何。
好吧,你可以做类似的事情
// use Type::process for a static method
Stream.of(provider()).filter( «cond» ).forEach(this::process);
Run Code Online (Sandbox Code Playgroud)
尽管这里的普通命令式语句确实没有任何好处
如果要限制新引入的变量的作用域,可以创建一个块。
{ Param param = provider(); if( «cond» ) process(param); }
Run Code Online (Sandbox Code Playgroud)
而且,作为旁注,使用这种传统构造进行调试会容易得多。
感谢大家的回复。我发现了一种类似于@Holger 建议的方法:
Optional.of ( provider() ).map ( v -> { if ( <cond> ) process ( v ); return null; } )
Run Code Online (Sandbox Code Playgroud)
(仅当 process() 返回 void 时才需要返回)。我同意定义中间变量会更快,并且可能我最终会这样做。然而,一定有一些心理原因为什么我更喜欢上述的功能形式。当它们很多时,它们看起来写起来更快,也许是因为您不需要考虑新的变量名称(如果涉及不同的类型,则需要多个变量定义)。
归档时间: |
|
查看次数: |
6000 次 |
最近记录: |