public class Java8BiFunction1 {
public static void main(String[] args) {
Developer dev1 = new Developer("jordan", BigDecimal.valueOf(9999));
Developer dev2 = new Developer("jack", BigDecimal.valueOf(8888));
Developer dev3 = new Developer("jaden", BigDecimal.valueOf(10000));
Developer dev4 = new Developer("ali", BigDecimal.valueOf(2000));
Developer dev5 = new Developer("myexample", BigDecimal.valueOf(1));
List<Developer> list = Arrays.asList(dev1, dev2, dev3, dev4, dev5);
// 1. 创建一个Comparator,使用码农的工资作为排序
Comparator<Developer> comparing = Comparator.comparing(Developer::getSalary);
// 2. 使用maxBy方法创建一个BinaryOperator用于返回两参数中较大的值
BinaryOperator<Developer> bo = BinaryOperator.maxBy(comparing);
Developer result = find(list, bo);
System.out.println(result); // Developer{name='jaden', salary=10000}
// 合并在一起
// 寻找工资最高的程序员
Developer developer = find(list, BinaryOperator.maxBy(Comparator.comparing(Developer::getSalary)));
System.out.println(developer); // Developer{name='jaden', salary=10000}
// 寻找工资最低的程序员
Developer developer2 = find(list, BinaryOperator.minBy(Comparator.comparing(Developer::getSalary)));
System.out.println(developer2); // Developer{name='myexample', salary=1}
}
private static Developer find(List<Developer> list, BinaryOperator<Developer> accumulator) {
Developer result = null;
for (Developer t : list) {
if (result == null) {
result = t;
} else {
result = accumulator.apply(result, t);
}
}
return result;
}
}
class Developer {
private String name;
private BigDecimal salary;
public Developer(String name, BigDecimal salary) {
this.name = name;
this.salary = salary;
}
public BigDecimal getSalary() {
return salary;
}
}