然后在消费者界面中使用lambda

时间:2019-04-28 17:34:58

标签: java lambda consumer

我可以和lambdas连锁吗?

我知道我can do it like thismyList.forEach(myConsumer1.andThen(myConsumer2));

但是如果我想提供一个lambda (e)->{ some actions }而不是myConsumer1,又要提供另一个lambda (e)->{ some more actions }而不是myConsumer2,怎么办?

我尝试过,但不起作用。但是总的来说有可能吗?也许我不知道正确的语法。

P.S。我的问题(从实际出发)不同于标记为"maybe already answered"的问题-只是完全不同,链接的帖子没有关于我的问题的实用信息-而且我不知道如何描述鳄鱼的不同之处来自爱。

2 个答案:

答案 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