【发布时间】: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<Integer> 让我们说或类似的东西。
那么为什么andThen() 要求我返回原始输入的类型?
【问题讨论】:
-
因为参数的类型不是
Consumer,而是Function。见Function#andThen。 -
取一个字符串来获取它的长度
andThen使用它的长度对字符串做一些转换并返回它。 -
Function<String, Integer> length = str -> str.length(); Function<Integer, String> hex = val -> Integer.toHexString(val); Function<String,String> lengthInHex = length.andThen(hex);这很难理解吗?或者:Function<String, Integer> length = String::length; Function<String,String> lengthInHex = length.andThen(Integer::toHexString);
标签: java java-8 functional-programming