java8 BiFunction接口

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012934325/article/details/86716231

这篇文章是对BiFunction函数式接口的学习总结。这里提醒一点,可以看出该接口中有方法的实现,不单单只有抽象方法,在java8中,有一个新的改进就是在现有的接口中增加了一些默认的方法实现,使用default关键字来修饰。这种做法不会影响以前代码对接口的实现,也对原有的接口进行了扩展。
传递行为给方法,而不是传递值

/**
 * BiFunction是一个函数式接口,它接口两个参数并产生一个结果值返回。
 * 它里面有一个apply(Object,Object)方法。
 * @param <T> 函数的第一个参数类型
 * @param <U> 函数的第二个参数类型
 * @param <R> 函数的结果类型
 * @since 1.8
 */
@FunctionalInterface
public interface BiFunction<T, U, R> {

    /**
     * 将apply函数应用到给定的参数上面
     *
     * @param t 函数的第一个参数
     * @param u 函数的第二个参数
     * @return R 函数的结果
     */
    R apply(T t, U u);

    /**
     * 返回一个组合的函数,第一次是将该函数应用到它的输入,接着是将该函数的after应用到
     * 之前的结果上。如果在任一函数评测期间抛出异常,它都会被传递给组合函数的调用者。
     * @param <V> 组合函数和after函数的输出类型
     * @param after 该函数应用将被在当前函数apply后被apply
     * @return 返回一个组合函数,第一次应用该函数,接着应用after函数
     * @throws 当after为null的时候,会抛出NullPointerException异常。
     */
    default <V> BiFunction<T, U, V> andThen(Function<? super R, ? extends V> after) {
        Objects.requireNonNull(after);
        return (T t, U u) -> after.apply(apply(t, u));
    }
}
package com.java8.learn;

import java.util.function.BiFunction;
import java.util.function.Function;

/**
 *@author:liyongyong
 *@description: BiFunction接口学习
 *@date 2019/1/21
 */
public class BiFunctionTest {
    public static void main(String[] args){
        BiFunctionTest test = new BiFunctionTest();
        //实现四则运算
        System.out.println(test.compute(4,2,(value1,value2)->value1+value2));
        System.out.println(test.compute(4,2,(v1,v2)->v1-v2));
        System.out.println(test.compute(1,2,(v1,v2)->v1*v2));
        System.out.println(test.compute(3,2,(v1,v2)->v1/v2));
        System.out.println(test.calcute(3,4,(v1,v2)->v1+v2,v->v * v));
    }

    public  int compute(int num1, int num2, BiFunction<Integer,Integer,Integer> biFunction){
        return  biFunction.apply(num1,num2);
    }

    public int calcute(int num1, int num2, BiFunction<Integer,Integer,Integer> biFunction, Function<Integer,Integer> function){
        //调用addThen首先对接收的两个参数进行bifunction的apply,然后在进行function的apply
        return biFunction.andThen(function).apply(num1,num2);
    }
}

输出结果

6
2
2
1
49

猜你喜欢

转载自blog.csdn.net/u012934325/article/details/86716231
今日推荐