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));
}
}
import java.util.function.BiFunction;
import java.util.function.Function;
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
BiConsumer
BiConsumer<T,U>接口是java8 Function函数里面的接口,它有两个方法, BiConsumer用法很简单。
//接收参数
void accept(T t, U u)
//默认方法,基本没什么用
default BiConsumer<T,U> andThen(BiConsumer<? super T,? super U> after)
BiConsumer用法示例(java8)示例如下,andThen(biConsumer)方法没有什么效果(可不用),主要是学会使用accept(T t, U u)方法,如下。
import java.util.function.BiConsumer;
public class TestDemo {
public static void main(String[] args) {
BiConsumer<String, String> biConsumer = (x, y) -> {
System.out.println(x+"==="+y);
};
biConsumer.andThen(biConsumer).accept("tpyyes.com ", " java8");
}
}
输出x与y参数的值,如下。
tpyyes.com === java8
tpyyes.com === java8
https://www.tpyyes.com/a/java/283.html
http://www.manongjc.com/article/50415.html