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聚合函数的更多相关文章

  1. Spark SQL 用户自定义函数UDF、用户自定义聚合函数UDAF 教程(Java踩坑教学版)

    在Spark中,也支持Hive中的自定义函数.自定义函数大致可以分为三种: UDF(User-Defined-Function),即最基本的自定义函数,类似to_char,to_date等 UDAF( ...

  2. 可以这样去理解group by和聚合函数

    写在前面的话:用了好久group by,今天早上一觉醒来,突然感觉group by好陌生,总有个筋别不过来,为什么不能够select * from Table group by id,为什么一定不能是 ...

  3. TSQL 聚合函数忽略NULL值

    max,min,sum,avg聚合函数会忽略null值,但不代表聚合函数不返回null值,如果表为空表,或聚合列都是null,则返回null.count 聚合函数忽略null值,如果聚合列都是null ...

  4. SQL Server 聚合函数算法优化技巧

    Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...

  5. Mongodb学习笔记四(Mongodb聚合函数)

    第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...

  6. sql语句 之聚合函数

      聚合分析 在访问数据库时,经常需要对表中的某列数据进行统计分析,如求其最大值.最小值.平均值等.所有这些针对表中一列或者多列数据的分析就称为聚合分析. 在SQL中,可以使用聚合函数快速实现数据的聚 ...

  7. oracle数据库函数之============‘’分析函数和聚合函数‘’

    1分析函数 分析函数根据一组行来进行聚合计算,用于计算完成狙击的累积排名等,分析函数为每组记录返回多个行 rank_number() 查询结果按照次序排列,不存在并列和站位的情况,可以用于做Oracl ...

  8. ORACLE 自定义聚合函数

    用户可以自定义聚合函数  ODCIAggregate,定义了四个聚集函数:初始化.迭代.合并和终止. Initialization is accomplished by the ODCIAggrega ...

  9. sql 聚合函数、排序方法详解

    聚合函数 count,max,min,avg,sum... select count (*) from T_Employee select Max(FSalary) from T_Employee 排 ...

随机推荐

  1. 设置Sublime插件快捷键--实现CSS颜色选取

    安装插件ColorPicker 如果你经常要查看或设置颜色值,这个插件可以很方便地调用你本机的调色板应用.(译者扩充:)这是一个双向的功能,你既可以在调色板中选择一个颜色,然后按"确定&qu ...

  2. servlet通过响应头Content-Disposition实现文件下载效果

    package day08; import java.io.File; import java.io.FileInputStream; import java.io.IOException; impo ...

  3. jQuery中ajax请求的六种方法(三、一):$.ajax()方法

    1.基础的$.ajax()方法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...

  4. FXGL游戏开发-JavaFX游戏框架

    FXGL 是一个JavaFX 游戏开发的框架,这个框架有两个版本,其中基于JDK1.8的版本已经不再维护,目前最新的是基于JDK11的版本,也就是Openjfx的版本. FXGL 提供了各种游戏范例: ...

  5. vue开发:前端项目模板

    简介 vue-cli创建vue项目,整合vuex.vue-router.axios.element-ui 项目模板下载地址 创建项目 使用vue-cli创建项目,功能选择:Babel.Router.v ...

  6. [源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区

    [源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区 目录 [源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区 0x00 摘要 0x01 前言 1.1 P ...

  7. Python__Xpath模块

    import requests from lxml import etree # 导入xpath headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6 ...

  8. 【数据库上】 第四讲 E-R模型基础知识

    第四讲 E-R模型基础知识 一.数据库设计过程 数据库设计的关键阶段? 各个阶段设计的主要任务? 基础条件:清楚一个应用系统的功能需求与数据需求(直接与用户交互.数据流程图示例/UML类图等) 核心阶 ...

  9. NOIP模拟38:a

      这是T1.   考场上思路与正解就差个前缀,打的线段树,因为其巨大常数快乐挂掉......   正解复杂度是\(O(n^2m)\),其实再挂个\(log\)也能过,但是需要用常数极其优秀的树状数组 ...

  10. 记录一下Vray5中文汉化版本中导出EXR或vrimg多通道文件的那些坑和解决方法

    最近在给一个培训机构代课,学生英语基础差,就安装了Vray5的中文版,噩梦从此开始. 做过合成的都知道,需要输出多通道到NUKE或者AE中进行合成,通常情况下把多个pass分成不同的文件对硬盘反复读写 ...