java getter了函数_函数式编程-统计功能(使用对象的getter方法和过滤条件作为参数)...

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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值