然后在 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));