java8新特性之stream流中reduce()求和知识有哪些
这篇文章主要介绍了java8新特性之stream流中reduce()求和知识有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
1.stream().reduce()单字段求和
(1)普通数字求和
public static void test2(){ List<Integer> list= Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8,9}); Integer sum=list.stream().reduce((x,y)->x+y).get(); System.out.println(sum); }
2.BigDecimal求和
public static void main(String[] args) { List<User> list=new ArrayList<>(); User user1=new User(); user1.setNum1(new BigDecimal(123)); user1.setNum2(new BigDecimal(100)); list.add(user1); User user2=new User(); user2.setNum1(new BigDecimal(100)); user2.setNum2(new BigDecimal(100)); list.add(user2); BigDecimal sum=list.stream().map(User::getNum1).reduce(BigDecimal::add).get(); System.out.println(sum); }
结果:
但是如果列表是中没有数据list.size()==0的时候会报错,所以需要将代码修改成如下:
BigDecimal sum=list.stream().map(User::getNum1) //返回num1的列表.reduce(BigDecimal.ZERO,BigDecimal::add); //列表字段求和
当list中没有元素的时候就默认返回0;
stream().reduce()多字段求和
public static void main(String[] args) { List<User> list=new ArrayList<>(); User user1=new User(); user1.setNum1(new BigDecimal(123)); user1.setNum2(new BigDecimal(100)); list.add(user1); User user2=new User(); user2.setNum1(new BigDecimal(100)); user2.setNum2(new BigDecimal(100)); list.add(user2); User u=list.stream().reduce((x,y)->{ User user=new User(); user.setNum1(x.getNum1().add(y.getNum1())); user.setNum2(x.getNum2().add(y.getNum2())); return user; }).get(); System.out.println(u.getNum1()+"------------"+u.getNum2()); }
结果:
同样,如果list中没有元素,则使用如下方式:
User u=list.stream().reduce(new User(),(x,y)->{ User user=new User(); user.setNum1(x.getNum1().add(y.getNum1())); user.setNum2(x.getNum2().add(y.getNum2())); return user; });
默认给一个User对象,就不会报错。
总结
有三个参数类型,本文只说了前两个
1.一个参数:Optional reduce(BinaryOperator accumulator),传入求和函数式,
2.两个参数:T reduce(T identity, BinaryOperator accumulator),(默认值,求和函数式)
3.三个参数的没怎么用过,暂不说明
感谢你能够认真阅读完这篇文章,希望小编分享的“java8新特性之stream流中reduce()求和知识有哪些”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341