然后在 Consumer 接口中使用 lambda
andThen with lambda in Consumer interface
我可以用 lambda 链接 andThen 吗?
我知道我 : myList.forEach(myConsumer1.andThen(myConsumer2));
但是如果我想提供一个 lambda (e)->{ some actions }
而不是 myConsumer1
和另一个 lambda (e)->{ some more actions }
而不是 myConsumer2
怎么办?
我试过了,还是不行。但一般来说是否可能 - 也许我不知道正确的语法。
P.S。我的问题(从实际角度来看)与标记为 的问题不同 - 它完全不同,链接的 post 对我的问题没有实际有用的信息 - 我不知道如何描述鳄鱼和爱情有何不同。
是的,你可以做到,但它需要正确转换 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);
您可以这样做,但您需要显式转换 lambda 表达式。
您的示例 (e)->{ some actions }
中的 lambda 表达式不一定是 Consumer
。它可能是您自己的功能接口,具有与 Consumer
中的 void accept(T t);
相同的签名,但没有 andThen
方法。编译器不知道这一点。所以你需要帮助编译器:
list.forEach(((Consumer<Integer>) e -> someAction).andThen(i -> someMoreAction));
我可以用 lambda 链接 andThen 吗?
我知道我 myList.forEach(myConsumer1.andThen(myConsumer2));
但是如果我想提供一个 lambda (e)->{ some actions }
而不是 myConsumer1
和另一个 lambda (e)->{ some more actions }
而不是 myConsumer2
怎么办?
我试过了,还是不行。但一般来说是否可能 - 也许我不知道正确的语法。
P.S。我的问题(从实际角度来看)与标记为
是的,你可以做到,但它需要正确转换 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);
您可以这样做,但您需要显式转换 lambda 表达式。
您的示例 (e)->{ some actions }
中的 lambda 表达式不一定是 Consumer
。它可能是您自己的功能接口,具有与 Consumer
中的 void accept(T t);
相同的签名,但没有 andThen
方法。编译器不知道这一点。所以你需要帮助编译器:
list.forEach(((Consumer<Integer>) e -> someAction).andThen(i -> someMoreAction));