Stream聚合函数
2021/9/28 23:43:46
本文主要是介绍Stream聚合函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Stream班介绍
幼稚园开学的第一天,各们家长把小朋友送到了园里,各位小朋友都你看看我,我看看你。有的嚎啕大哭,有的呆若木鸡....这里时候园长安排我拿来小本本记录入园的小朋友....
记录小朋友
身为程序员的我当然不会拿笔来记录了。我准备代码来记录下、先写小孩子的类Child
在映射基本信息
@Getter @Setter @NoArgsConstructor public class Child { private int age; //年龄 private String firstName; //名 private String lastName; //姓 private String fullName; //全名 Child(int age, String lastName, String firstName) { this.age = age; this.lastName = lastName; this.firstName = firstName; this.fullName = lastName + firstName; } }
在创建一个班名册类ClassBook
来记录Stream班的入园所有学生!
@Getter @Setter @NoArgsConstructor @AllArgsConstructor public class ClassBook { private String name = "Stream班名册"; //班名册记录 private List<Child> kids = new LinkedList<>();//名册表 }
由于YQ的原因,我们园小班只收了10个小朋友,现在的小朋友可了不得,光这名儿起的就有文化,我先把这些小朋友记录下来再说!
public class StreamMathApiTest { private ClassBook book; @Before public void __setUp() { List<Child> allChild = new LinkedList<>(); allChild.add(new Child(3.0F, "萧", "峰")); allChild.add(new Child(3.1F, "任", "我行")); allChild.add(new Child(3.2F, "郭", "靖")); allChild.add(new Child(3.5F, "洪", "七公")); allChild.add(new Child(3.6F, "黄", "药师")); allChild.add(new Child(3.9F, "欧", "阳峰")); allChild.add(new Child(3.4F, "任", "飞燕")); allChild.add(new Child(3.7F, "杨", "过")); allChild.add(new Child(3.3F, "杨", "逍")); allChild.add(new Child(3.8F, "石", "破天")); this.book = new ClassBook("Stream班名册", allChild); } }
还是写程序快啊,不用做Excel表格,一个一个输入。
计算总学生(Count)
刚把这些小学生记录完,还没歇着,园长就让我们汇报下今天一共入园了多少学生~,等待哈,我先跑个代码看一看!
@Test public void test_count() { //count 函数 long count = this.book.getKids().stream(). count(); Assert.assertTrue(count == 10l); }
这不,能让电脑动的我决不动脑子。一个就算出个10
来。我赶紧向园长汇报!园长跨我算的快!刚准备喝口水、园让又让我计算下我们班平均年龄!!!没办法,我再写个程序!
计算平均年龄(mapTo(xxx) + Avgage)
@Test public void test_avg() { double avgAge = this.book.getKids(). stream(). mapToDouble(Child::getAge). average().orElse(0l); Assert.assertEquals("Error calc!", "3.45", Double.toString(avgAge)); }
程序真是个好东西,你看不用一个一个输入,我写好代码,它自动跑出结果就行!帮我算出了平均数为3.45,这不,园长真的再次跨我能干!笑着说:顺便给我算下咱们班最大的年龄是多少!、我一脸无耐。
计算最大/小值(Max/Min)
@Test public void test_max() { //最大值 Child maxChild = this.book.getKids().stream(). max((o1, o2) -> { //借助BigDecimal函数来比较,也可以把Float转成int来进行比较,方法很多种。 BigDecimal first = new BigDecimal(String.valueOf(o1.getAge())); BigDecimal second = new BigDecimal(String.valueOf(o2.getAge())); return first.compareTo(second); }).get(); Assert.assertEquals("欧阳峰", maxChild.getFullName()); //最小值 返回过来即可 Child minChild = this.book.getKids().stream(). max((o1, o2) -> { BigDecimal first = new BigDecimal(String.valueOf(o1.getAge())); BigDecimal second = new BigDecimal(String.valueOf(o2.getAge())); return second.compareTo(first); }).get(); Assert.assertEquals("萧峰", minChild.getFullName()); }
反正不用我一个一个计算,我就做个顺水人情,顺便把咱们班最小的朋友也给您找出来!省的你还让我回来算!这不,最大的是
欧阳峰/3岁9个月,最小是的萧峰/3岁挂0、心想这下都给你整明白了吧!应该不用算啥了吧!这不刚想完,就让我回来再算下总年龄!
我...好人做到底,送佛送到西!我就再写一手!
累加(reduce)
@Test public void test_reduce() { Float totalAge = this.book.getKids().stream(). map(Child::getAge) .reduce(0f, Float::sum); //Double::sum/Interge::sum/...... Assert.assertEquals(totalAge.toString(), "34.5"); }
算出来了!这加减乘除平均数最大最小都给你整出来了,这下没有啥要计算了的吧!
好了、今天的Stream
教程到此结束!下次待园长吩咐了才做!
代码在GitHub
这篇关于Stream聚合函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-082024年常用的情绪识别API
- 2025-01-07如何利用看板工具优化品牌内容创作与审批,确保按时发布?
- 2025-01-07百万架构师第十一课:源码分析:Spring 源码分析:Spring源码分析前篇|JavaGuide
- 2025-01-07质量检测标准严苛,这 6 款办公软件达标了吗?
- 2025-01-07提升品牌活动管理的效率:看板工具助力品牌活动日历的可视化管理
- 2025-01-07宠物商场的精准营销秘籍:揭秘看板软件的力量
- 2025-01-07“30了,资深骑手” | 程序员能有什么好出路?
- 2025-01-07宠物公园的营销秘籍:看板软件如何帮你精准触达目标客户?
- 2025-01-07从任务分解到资源优化:甘特图工具全解析
- 2025-01-07企业升级必备指南:从传统办公软件到SaaS工具的转型攻略