java 链接 lambda 函数
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/32489316/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Chaining lambda functions
提问by bvdb
When a Java method accepts a Function<? super T, ? extends U>
, then it's possible to provide method references in a syntax like the following: MyClass::myMethod
.
当 Java 方法接受 a 时Function<? super T, ? extends U>
,可以使用如下语法提供方法引用:MyClass::myMethod
.
However, I'm wondering if there's a way to chain multiple method calls. Here's an example to illustrate the case.
但是,我想知道是否有一种方法可以链接多个方法调用。这里有一个例子来说明这种情况。
// on a specific object, without lambda
myString.trim().toUpperCase()
I am wondering if there is a syntax to translate this to a lambda expression. I am hoping there is something like the following:
我想知道是否有将其转换为 lambda 表达式的语法。我希望有如下内容:
// something like: (which doesn't work)
String::trim::toUpperCase
Alternatively, is there a utility class to merge functions?
或者,是否有用于合并函数的实用程序类?
// example: (which does not exist)
FunctionUtil.chain(String::trim, String::toUpperCase);
采纳答案by Tunaki
Java 8 Function
s can be chained with the method andThen
:
Java 8Function
可以使用以下方法链接andThen
:
UnaryOperator<String> trimFunction = String::trim;
UnaryOperator<String> toUpperCaseFunction = String::toUpperCase;
Stream.of(" a ", " b ").map(trimFunction.andThen(toUpperCaseFunction)) // Stream is now ["A", "B"]
Note that in your actual example, String::trim
does not compile because the trim
method does not take any input, so it does not conform to the functional interface Function
(same goes for String::toUpperCase
).
请注意,在您的实际示例中,String::trim
不会编译,因为该trim
方法不接受任何输入,因此它不符合功能接口Function
(同样适用于String::toUpperCase
)。