MST
星途 面试题库

面试题:Java函数式编程中高阶函数的应用

假设你正在开发一个Java应用,需要实现一个高阶函数,该函数接收一个函数作为参数,并返回一个新的函数。请使用Java的Lambda表达式和函数式编程相关知识进行代码实现,并解释其原理。
11.4万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

以下是代码实现:

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);
    }
}

原理解释

  1. 函数式接口:Java 8引入了函数式接口,像Function接口,它只包含一个抽象方法applyFunction<T, R>表示接受一个类型为T的参数并返回一个类型为R的结果的函数。
  2. Lambda表达式:Lambda表达式是Java 8对函数式编程的支持,用于创建匿名函数。例如num -> num * num就是一个Lambda表达式,它实现了Function接口的apply方法,将输入的num进行平方操作。
  3. 高阶函数实现higherOrderFunction方法接受两个Function类型的参数function1function2。返回的新函数是一个Lambda表达式(t -> function2.apply(function1.apply(t)))。这个新函数首先将输入参数t应用到function1,然后将function1的结果应用到function2,实现了函数的组合,这正是高阶函数的特性,即接受函数作为参数并返回一个新函数。在main方法中,我们创建了两个函数squaretoString,通过higherOrderFunction将它们组合成一个新的函数composedFunction,并对数字5进行操作,最终输出Result: 25