链接 lambda 函数
Chaining lambda functions
当 Java 方法接受 Function<? super T, ? extends U>
时,可以使用如下语法提供方法引用:MyClass::myMethod
.
但是,我想知道是否有一种方法可以链接多个方法调用。
下面举个例子来说明一下。
// on a specific object, without lambda
myString.trim().toUpperCase()
我想知道是否有语法可以将其转换为 lambda 表达式。我希望有如下内容:
// something like: (which doesn't work)
String::trim::toUpperCase
或者,是否有合并功能的实用程序class?
// example: (which does not exist)
FunctionUtil.chain(String::trim, String::toUpperCase);
Java 8 Function
s 可以用方法 andThen
:
链接起来
UnaryOperator<String> trimFunction = String::trim;
UnaryOperator<String> toUpperCaseFunction = String::toUpperCase;
Stream.of(" a ", " b ").map(trimFunction.andThen(toUpperCaseFunction)) // Stream is now ["A", "B"]
请注意,在你的实际例子中,String::trim
不会编译,因为trim
方法不接受任何输入,所以它不符合功能接口Function
(同String::toUpperCase
).
当 Java 方法接受 Function<? super T, ? extends U>
时,可以使用如下语法提供方法引用:MyClass::myMethod
.
但是,我想知道是否有一种方法可以链接多个方法调用。 下面举个例子来说明一下。
// on a specific object, without lambda
myString.trim().toUpperCase()
我想知道是否有语法可以将其转换为 lambda 表达式。我希望有如下内容:
// something like: (which doesn't work)
String::trim::toUpperCase
或者,是否有合并功能的实用程序class?
// example: (which does not exist)
FunctionUtil.chain(String::trim, String::toUpperCase);
Java 8 Function
s 可以用方法 andThen
:
UnaryOperator<String> trimFunction = String::trim;
UnaryOperator<String> toUpperCaseFunction = String::toUpperCase;
Stream.of(" a ", " b ").map(trimFunction.andThen(toUpperCaseFunction)) // Stream is now ["A", "B"]
请注意,在你的实际例子中,String::trim
不会编译,因为trim
方法不接受任何输入,所以它不符合功能接口Function
(同String::toUpperCase
).