Java8 方法引用用作函数对象以组合函数
2022-09-01 05:42:03
在Java8中,有没有办法使用方法引用作为对象来使用它的方法,如下所示:Function
Stream.of("ciao", "hola", "hello")
.map(String::length.andThen(n -> n * 2))
这个问题与,它只是用作示例,我想有关于方法参考的答案Stream
在Java8中,有没有办法使用方法引用作为对象来使用它的方法,如下所示:Function
Stream.of("ciao", "hola", "hello")
.map(String::length.andThen(n -> n * 2))
这个问题与,它只是用作示例,我想有关于方法参考的答案Stream
您可以编写一个静态方法来执行此操作:
import java.util.function.*;
class Test {
public static void main(String[] args) {
Function<String, Integer> function = combine(String::length, n -> n * 2);
System.out.println(function.apply("foo"));
}
public static <T1, T2, T3> Function<T1, T3> combine(
Function<T1, T2> first,
Function<T2, T3> second) {
return first.andThen(second);
}
}
然后,您可以将其放入实用程序类中,然后静态导入。
或者,创建一个更简单的静态方法,该方法仅返回给定的函数,以便编译器知道您正在做什么:
import java.util.function.*;
class Test {
public static void main(String[] args) {
Function<String, Integer> function = asFunction(String::length).andThen(n -> n * 2);
System.out.println(function.apply("foo"));
}
public static <T1, T2> Function<T1, T2> asFunction(Function<T1, T2> function) {
return function;
}
}
你可以把它保存到一个变量中:
Function<String, Integer> toLength = String::length;
Stream.of("ciao", "hola", "hello")
.map(toLength.andThen(n -> n * 2));
或者你可以使用一个演员,但它的可读性较差,IMO:
Stream.of("ciao", "hola", "hello")
.map(((Function<String, Integer>) String::length).andThen(n -> n * 2));