jdk 8 函数接口之function

JKD8 学习

什么叫函数接口?

  1. 有且只能有一个抽象方法
  2. 加了@functionalInterface注解
  3. 不加funcationalInterface 主要满足只有一个抽象方法也会被jdk8认为是函数式接口

function接口

@FunctionalInterface
public interface Function {

    /**
     * Applies this function to the given argument.
     *
     * @param t the function argument
     * @return the function result
     */
    R apply(T t);
  
   default  Function compose(Function before) {
        Objects.requireNonNull(before);
        return (V v) -> apply(before.apply(v));
    }


    default  Function andThen(Function after) {
        Objects.requireNonNull(after);
        return (T t) -> after.apply(apply(t));
    }
  • R apply(T t);
    只接受一个参数,然后返回一个参数

  • compose 方法

default Function compose(Function before) 方法 先运行传入的这个函数方法然后运行函数本身

  • andThen

default Function andThen(Function after) 方法是先执行函数本身然后在执行传入的function 函数 正好与compose 的方法相反

代码示例如下:

public class FunctionTest {

	public static void main(String[] args) {
		FunctionTest test1 = new FunctionTest();
		System.out.println(test1.compute1(2, value-> value * 3, value -> value * value));
		System.out.println(test1.compute2(2, value-> value * 3, value -> value * value));
	}

	
	
	public int compute1(Integer a, Function func1,Function func2) {
		return func1.compose(func2).apply(a);
		
	}
	public int compute2(Integer a, Function func1,Function func2) {
		return func1.andThen(func2).apply(a);
		
	}
}


12
36
  • Bifuncation
    可以传俩个参数
	public int compute3(Integer a, Integer b,BiFunction func2) {
		return func2.apply(a, b);
		
	}
	System.out.println(test1.compute3(2,  3, (value,value2) -> value * value2));

Bifuncation 只有一个andThen 方法 没有compose 方法 因为compose 方法是先运行传入函数本身 运行完之后就是一个值了.
那么这样的一个方法就和function 的compose 方法是一样了.
他也无法调用Bifunction 的apply 方法了因为 这个方法需要俩个入参
那么Bifunction 为什么会有andThen呢? 因为andthen方法是先调用函数本身的apply(r,u,t) 调用完之后就变成一个值 可以让入参的function函数调用

你可能感兴趣的:(jdk8)