Java 8引入了一种新的函数式编程风格,Function接口是Java函数式编程中最重要的四个函数式接口之一。
函数接口BiFunction,它是Function接口的扩展版本。
BinaryOperator 也是 Java 8 中引入的一个函数式接口,位于 java.util.function 包中。它是一个特殊的 BiFunction,用于表示接受两个相同类型的参数并返回相同类型结果的操作。该接口定义了一个 apply 方法,用于执行操作。
在介绍函数接口BiFunction,我们先要学习Function接口。
Function
Function
定义:Function
关于Function接口的详细介绍,请参见我的博客:Java 函数接口Function详解与示例【函数接口Function】
函数接口BiFunction
函数接口BiFunction,它是Function接口的扩展版本。BiFunction
定义:BiFunction
// 定义一个 BiFunction:接收两个整数并返回它们的乘积
BiFunction<Integer, Integer, Integer> multiplyFun = (a, b) -> a * b;
// 调用 apply() 方法传递两个参数并获取结果
System.out.println(multiplyFun.apply(5, 3)); // 输出 15
// 两个参数构造器,创建实例
BiFunction<String, Integer, Person> bFun = (name, age) -> new Person(name, age);
BiFunction<String, Integer, Person> bFun1 = Person::new;
System.out.println("优秀员工:"+bFun1.apply("赵有为", 42));
BiFunction函数接口例程
package function;
import java.util.function.BiFunction;
public class BiFunctionTest {
public static Integer operate(int a, int b, BiFunction<Integer, Integer, Integer> op) {
return op.apply(a, b);
}
public static void main(String[] args) {
BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
BiFunction<Integer, Integer, Integer> subtract = (a, b) -> a - b;
int x = 12;
int y = 6;
System.out.println("算术运算:加(Add): " + operate(x, y, add));
System.out.println("算术运算:减(Subtract): " + operate(x, y, subtract));
}
}
BiFunction + 构造函数的实例
通过方法引用 className::new调用,返回对象。
BiFunction<String, Integer, Person> biCrtPsnFun = Person::new;
Person personA = biCrtPsnFun.apply("李明", 32);
Person personB = biCrtPsnFun.apply("张亮", 12);
System.out.println("personA =" + personA);
System.out.println("personB =" + personB);
函数接口BinaryOperator
BinaryOperator 是 Java 8 中引入的一个函数式接口,位于 java.util.function 包中。它是一个特殊的 BiFunction,用于表示接受两个相同类型的参数并返回相同类型结果的操作。
Java 8函数式接口BinaryOperator是 BiFunction
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T, T, T> {
// 此处可以添加其他方法
}
BinaryOperator示例:
public static void binaryOperator() {
/***下面是双参数的BinaryOperator,继承自BiFunction***/
BinaryOperator<Integer> adder = (x, y) -> x + y;
int sum = adder.apply(10, 20);
System.out.println("Sum: " + sum); // 输出 Sum: 30
BinaryOperator<Integer> accumulator = Integer::sum;
sum = accumulator.apply(100, 200);
System.out.println("Sum: " + sum); // 输出 Sum: 300
BinaryOperator<Person> olderPerson = (p1, p2) -> p1.getAge() > p2.getAge() ? p1 : p2;
Person person1 = new Person("张三", 38);
Person person2 = new Person("李四", 65);
Person older = olderPerson.apply(person1, person2);
System.out.println("年长的人: " + older); // 输出: 年长的人: 姓名:李四 年龄:65
}
上述示例中用到的自定义对象Person类:
public class Person {
private String name;
private int age = 32;
public Person(String name) { // 构造器
this.name = name;
}
// 构造器
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// getter和setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "姓名:"+name + " 年龄:"+age;
}
}
BiFunction与BinaryOperator的应用场景
计算操作: 用于执行需要两个输入的计算操作,如数学运算、合并数据等。例如,计算两个数的和、差、积、商。
数据约简: 在函数式编程中,可能需要将两个输入归一为一个结果,例如reduce操作的数据合并时,可使用 BiFunction和BinaryOperator 计算合并结果。
函数链: 使用 andThen 方法将 BiFunction 与其他函数组合在一起,从而实现更复杂的数据处理流程。例如,先进行计算然后进行后续的数据处理。
参考文献
【函数接口与方法引用】Java 中的方法引用