packagefunction;importlombok.Data;importjava.math.BigDecimal;importjava.util.ArrayList;importjava.util.List;importjava.util.function.Function;importjava.util.function.Predicate;importjava.util.function.ToIntFunction;public classPersonServiceNew {
@Datapublic static classPerson {privateString name;privateString gender;private intage;private intmoney;privateBigDecimal moneyBD;
}//模拟的数据
private static List list = new ArrayList<>();
//数据初始化赋值static{
Person p1= newPerson();
p1.setName("hello1");
p1.setAge(10);
p1.setGender("女");
p1.setMoney(1000);
p1.setMoneyBD(new BigDecimal("1000"));
Person p2= newPerson();
p2.setName("hello2");
p2.setAge(20);
p2.setGender("男");
p2.setMoney(2000);
p2.setMoneyBD(new BigDecimal("2000"));
Person p3= newPerson();
p3.setName("hello3");
p3.setAge(30);
p3.setGender("女");
p3.setMoney(3000);
p3.setMoneyBD(new BigDecimal("3000"));
Person p4= newPerson();
p4.setName("hello4");
p4.setAge(40);
p4.setGender("男");
p4.setMoney(4000);
p4.setMoneyBD(new BigDecimal("4000"));
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
}/*** count based on incoming methods and conditions
*
*@parammethod
*@parampredicate
*@returnvalue is of type int*/
public static int count(ToIntFunction method, Predicatepredicate) {int sum =list.stream()
.filter(predicate::test)
.mapToInt(method).sum();returnsum;
}/*** count based on incoming methods and conditions
*
*@parammethod
*@parampredicate
*@returnvalue is of type BigDecimal*/
public static BigDecimal countBg(Function method, Predicatepredicate) {
BigDecimal sum=list.stream()
.filter(predicate::test)
.map(method).reduce(BigDecimal.ZERO, BigDecimal::add);returnsum;
}public static voidmain(String[] args) {//统计 年龄=10 的所有年龄之和 结果: sum1 :10
int sum1 = count(Person::getAge, p -> 10 ==p.getAge());
System.out.println("sum1 :" +sum1);//统计 所有性别 "女" 的 money 结果: sum2 :4000
int sum2 = count(Person::getMoney, p -> "女".equals(p.getGender()));
System.out.println("sum2 :" +sum2);//统计 年龄=10 的所有money之和 , 结果: sum11 :1000
BigDecimal sum11 = countBg(Person::getMoneyBD, p -> p.getAge() == 10);
System.out.println("sum11 :" +sum11);//统计 所有性别 "女" 的 moneyBD 结果: sum22 :4000
BigDecimal sum22 = countBg(Person::getMoneyBD, p -> "女".equals(p.getGender()));
System.out.println("sum22 :" +sum22);
}
}