💡 函数式编程
一、 Function 源码:
/** Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*/package java.util.function;import java.util.Objects;/*** Represents a function that accepts one argument and produces a result.** <p>This is a <a href="package-summary.html">functional interface</a>* whose functional method is {@link #apply(Object)}.** @param <T> the type of the input to the function* @param <R> the type of the result of the function** @since 1.8*/@FunctionalInterfacepublic interface Function<T, R> {/*** 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 <V> 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 <V> Function<V, R> compose(Function<? super V, ? extends T> 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 <V> 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 <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {Objects.requireNonNull(after);return (T t) -> after.apply(apply(t));}/*** Returns a function that always returns its input argument.** @param <T> the type of the input and output objects to the function* @return a function that always returns its input argument*/static <T> Function<T, T> identity() {return t -> t;}}
1.1 )apply(T t);方法:
翻译过来就是:将给定的参数应用到这个函数上,传入的参数类型为T返回类型为R
public class TestFunction {public static void main(String[] args) {System.out.println(testFunction(10, integer -> integer * 2));}public static int testFunction(int i, Function<Integer, Integer> function) {return function.apply(i);}}-- 输出:20
1.2) compose(Function<? super V, ? extends T> before)
翻译过来就是:接收一个function类型的函数作为参数
public class TestFunctionofcompose {public static void main(String[] args) {System.out.println(testFunction(10, i -> i * 2 + 9, j -> j * j));}public static int testFunction(int i, Function<Integer, Integer> function1, Function<Integer, Integer> function2 ) {return function1.compose(function2).apply(i);}}-- 输出: 209
