我可以和lambdas连锁吗?
我知道我can do it like this:myList.forEach(myConsumer1.andThen(myConsumer2));
但是如果我想提供一个lambda (e)->{ some actions }
而不是myConsumer1
,又要提供另一个lambda (e)->{ some more actions }
而不是myConsumer2
,怎么办?
我尝试过,但不起作用。但是总的来说有可能吗?也许我不知道正确的语法。
P.S。我的问题(从实际出发)不同于标记为"maybe already answered"的问题-只是完全不同,链接的帖子没有关于我的问题的实用信息-而且我不知道如何描述鳄鱼的不同之处来自爱。
答案 0 :(得分:2)
是的,您可以执行此操作,但这需要对lambda进行适当的投射。
int[] val = { 23
};
Consumer<Integer> con = ((Consumer<Integer>) (a) ->
{
for (int i = 1; i < a; i++) {
val[0] += i;
}
}).andThen((b) -> System.out.println(val[0] * b));
con.accept(10);
答案 1 :(得分:2)
您可以执行此操作,但是您需要显式转换lambda表达式。
示例bans
中的lambda表达式不一定是(e)->{ some actions }
。它可能是您自己的功能接口,具有与Consumer
中的void accept(T t);
相同的签名,但没有Consumer
方法。编译器不知道这一点。因此,您需要帮助编译器:
andThen