Jos*_*lds 4 java lambda java-8
在.NET中,有一种简单的方法可以组合两个委托(.NET的lambda版本).
基本上,你有:
LambdaType f1 = (a, b) => doSomething(a, b);
LambdaType f2 = (a, b) => doSomethingElse(a, b);
LambdaType combined = System.Delegate.Combine(f1, f2);
// combined is equiv to: (a, b) => { f1.invoke(a, b); f2.invoke(a, b);};
Run Code Online (Sandbox Code Playgroud)
在Java中是否有这样的结合两个lambdas?什么都没想到.它是一个不错的小实用程序,虽然说实话上并不太难以定义只调用两个(或更多)的第二个lambda.
Jac*_*ack 11
你在谈论Java 8 lambdas吗?因为存在这样的实用程序,例如:
Predicate<Foo> pred1 = f -> true;
Predicate<Foo> pred2 = pred1.and(f -> false);
Run Code Online (Sandbox Code Playgroud)
要么
Function<Int,Int> func1 = x -> x + 1;
Function<Int,Int> func2 = func1.andThen(x -> x*2);
Run Code Online (Sandbox Code Playgroud)
您应该查看java.util.function包,因为您可能会发现该功能已经可用.
在您的具体示例中,您不是在编写两个函数,实际上,从功能上讲,您不能编写两个接受两个参数并返回一个参数(或void)的函数.
这是因为您缺少要求:第一个函数的codomain必须对应于第二个函数的域,否则无法完成组合.
你在这里真正做的是顺序调用具有相同参数的两个不相关的函数.这个问题可以通过做同样的事情来解决:
BiConsumer<Foo,Bar> combination = (f,b) -> { doSomething(f,b); doSomethingElse(f,b); };
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
610 次 |
最近记录: |