面试题答案
一键面试以下是代码实现:
import java.util.function.Function;
public class HigherOrderFunctionExample {
public static <T, U, V> Function<T, V> higherOrderFunction(Function<T, U> function1, Function<U, V> function2) {
return t -> function2.apply(function1.apply(t));
}
public static void main(String[] args) {
Function<Integer, Integer> square = num -> num * num;
Function<Integer, String> toString = num -> "Result: " + num;
Function<Integer, String> composedFunction = higherOrderFunction(square, toString);
String result = composedFunction.apply(5);
System.out.println(result);
}
}
原理解释
- 函数式接口:Java 8引入了函数式接口,像
Function
接口,它只包含一个抽象方法apply
。Function<T, R>
表示接受一个类型为T
的参数并返回一个类型为R
的结果的函数。 - Lambda表达式:Lambda表达式是Java 8对函数式编程的支持,用于创建匿名函数。例如
num -> num * num
就是一个Lambda表达式,它实现了Function
接口的apply
方法,将输入的num
进行平方操作。 - 高阶函数实现:
higherOrderFunction
方法接受两个Function
类型的参数function1
和function2
。返回的新函数是一个Lambda表达式(t -> function2.apply(function1.apply(t)))
。这个新函数首先将输入参数t
应用到function1
,然后将function1
的结果应用到function2
,实现了函数的组合,这正是高阶函数的特性,即接受函数作为参数并返回一个新函数。在main
方法中,我们创建了两个函数square
和toString
,通过higherOrderFunction
将它们组合成一个新的函数composedFunction
,并对数字5
进行操作,最终输出Result: 25
。