【问题标题】:Function<String, Consumer<String>> java 8函数<字符串,消费者<字符串>> java 8
【发布时间】:2017-06-27 14:15:08
【问题描述】:

下面的 lambda 函数有什么作用?

public class FunctionInterface {
    public static void main(String[] args) {

        Function<String, Consumer<Integer>> secondFunction = s -> x -> System.out.println(x);

        System.out.println(secondFunction.apply("Text"));
    }
}

上面的代码是打印一些随机值,如何让它打印文本?

【问题讨论】:

  • 有什么问题?
  • 这个Function 返回Consumer&lt;Integer&gt;。要打印一些东西,你需要做secondFunction.apply("").accept(10)
  • 您为什么要编写您不理解的代码,然后想知道为什么它没有按照您的意愿执行?就做Consumer&lt;String&gt; consumer = x -&gt; System.out.println(x); consumer.accept("Text"); - 为什么你需要一个函数来返回一个给定你根本不使用的字符串参数的消费者?
  • 或者干脆System.out::println ;)

标签: java lambda


【解决方案1】:

您的变量secondFunction 是一个Function,它接受一个String 并返回一个Consumer&lt;Integer&gt;。在这一行:

System.out.println(secondFunction.apply("Text"));

您在Function 上调用apply,这将返回一个Consumer&lt;Integer&gt;,然后您打印该对象,这将导致toStringConsumer&lt;Integer&gt; 对象上被调用(然后是字符串将被打印)。

它不会运行 lambda 表达式,这正是您所期望的。试试这个:

// Call accept(123) on the consumer, which will execute the lambda
secondFunction.apply("Text").accept(123);

【讨论】:

    【解决方案2】:

    你说你想打印“文本”也许这更容易? 您不需要使用函数返回消费者。我很困惑,目的是什么?

    Consumer<String> consumer = System.out::println;
    consumer.accept("Text");
    

    【讨论】:

    • 我在试验 lambdas :)
    猜你喜欢
    • 2021-02-07
    • 2011-08-25
    • 1970-01-01
    • 2021-11-05
    • 2023-03-27
    • 2018-12-30
    • 2015-04-02
    • 1970-01-01
    • 2015-08-15
    相关资源
    最近更新 更多