【问题标题】:Understanding andThen() function理解 andThen() 函数
【发布时间】:2020-10-22 20:53:54
【问题描述】:

考虑以下示例:

public static void main(String[] args) {
    Function<String, Integer> f1 = str ->  str.length();
    f1.andThen(i -> {
        System.out.println("length is " + i);
        return "why do I need to return a String here?";
    }).apply("12345");
}

我试图理解为什么我必须返回String

这背后的逻辑是什么?我希望 andThen 会接受 Consumer&lt;Integer&gt; 让我们说或类似的东西。

那么为什么andThen() 要求我返回原始输入的类型?

【问题讨论】:

  • 因为参数的类型不是Consumer,而是Function。见Function#andThen
  • 取一个字符串来获取它的长度 andThen 使用它的长度对字符串做一些转换并返回它。
  • Function&lt;String, Integer&gt; length = str -&gt; str.length(); Function&lt;Integer, String&gt; hex = val -&gt; Integer.toHexString(val); Function&lt;String,String&gt; lengthInHex = length.andThen(hex); 这很难理解吗?或者:Function&lt;String, Integer&gt; length = String::length; Function&lt;String,String&gt; lengthInHex = length.andThen(Integer::toHexString);

标签: java java-8 functional-programming


【解决方案1】:

你想要的可以通过

Function<String, Integer> f1 = str ->  str.length();
Consumer<Integer> printer = i -> System.out.println("length is " + i);
printer.accept(f1.apply("12345"));

andThen 用于将函数链接在一起。函数总是有结果的。

【讨论】:

    猜你喜欢
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多