java8函数编程--Function

Function

Function是java8的一个函数式编程接口

@FunctionalInterface
public interface Function {

    /**
     * Applies this function to the given argument.
     *
     * @param t the function argument
     * @return the function result
     */
    R apply(T t);

    /**
     * Returns a composed function that first applies the {@code before}
     * function to its input, and then applies this function to the result.
     * If evaluation of either function throws an exception, it is relayed to
     * the caller of the composed function.
     *
     * @param  the type of input to the {@code before} function, and to the
     *           composed function
     * @param before the function to apply before this function is applied
     * @return a composed function that first applies the {@code before}
     * function and then applies this function
     * @throws NullPointerException if before is null
     *
     * @see #andThen(Function)
     */
    default  Function compose(Function before) {
        Objects.requireNonNull(before);
        return (V v) -> apply(before.apply(v));
    }

    /**
     * Returns a composed function that first applies this function to
     * its input, and then applies the {@code after} function to the result.
     * If evaluation of either function throws an exception, it is relayed to
     * the caller of the composed function.
     *
     * @param  the type of output of the {@code after} function, and of the
     *           composed function
     * @param after the function to apply after this function is applied
     * @return a composed function that first applies this function and then
     * applies the {@code after} function
     * @throws NullPointerException if after is null
     *
     * @see #compose(Function)
     */
    default  Function andThen(Function after) {
        Objects.requireNonNull(after);
        return (T t) -> after.apply(apply(t));
    }

    /**
     * Returns a function that always returns its input argument.
     *
     * @param  the type of the input and output objects to the function
     * @return a function that always returns its input argument
     */
    static  Function identity() {
        return t -> t;
    }
}

apply方法接收一个入参T,返回R,在使用上和理解上类似于我们上学时学的函数 y=f(x),可以将我们定义的函数方法作用在入参T上,函数的返回值就是R

public class FunctionPractice {
    
    public static  Integer getMaxAgeFromClassRoom(T t,Function func){
        return func.apply(t);
    }
}

public class ClassRoom {

    List studentList ;
    public ClassRoom() {
         studentList = new ArrayList<>();
         Student s1 = new Student();
         s1.setAge(10);
         s1.setName("s1");

         Student s2 = new Student();
         s2.setAge(11);
         s2.setName("s2");
         studentList.add(s1);
         studentList.add(s2);
     }


    public  Integer getStudentAgeByName(){
        if(CollectionUtils.isEmpty(studentList)){
            return null;
        }
        studentList.sort(Comparator.comparing(Student::getAge).reversed());

        return studentList.get(0).getAge();
    }
}
public class FunctionTest {

    @Test
    public void test(){
        ClassRoom classRoom = new ClassRoom();
        Integer age = FunctionPractice.getMaxAgeFromClassRoom(classRoom,ClassRoom::getStudentAgeByName);
        System.out.println("max age = "+age);
    }
}

你可能感兴趣的:(java8函数编程--Function)