Java8 Stream Collectors groupingBy 和 mapping 配合使用 Collectors.summingInt()分组求和

介绍 Java8 Stream 中 Collectors.groupingBy() 的文章已经很多了,这里想记录一下该方法和 Collectors.mapping() 方法配合使用的一些案例。

一、准备

  1. Student 实体类。
@Data
@AllArgsConstructor
public class Student {private String name;private int age;private int score;
}
  1. 初始化集合
static final List<Student> studentList = Arrays.asList(new Student("S1", 8, 80),new Student("S2", 8, 80),new Student("S3", 8, 85),new Student("S4", 8, 90),new Student("S5", 9, 95),new Student("S6", 9, 85),new Student("S7", 9, 90)
);

二、按 age 分组 + name 集合

public static void main(String[] args) {Map<Integer, Set<String>> result = studentList.stream().collect(Collectors.groupingBy(Student::getAge, Collectors.mapping(Student::getName, Collectors.toSet())));System.out.println(result);
}

输出:

{8=[S3, S4, S1, S2],9=[S5, S6, S7]
}

三、按 age 分组 + score 最大值

public static void main(String[] args) {Map<Integer, Double> result = studentList.stream().collect(Collectors.groupingBy(Student::getAge,Collectors.mapping(Student::getScore, Collectors.maxBy(Integer::compareTo))));System.out.println(result);
}

输出:

{8=Optional[90],9=Optional[95]
}


Collectors.summingInt()分组求和

如何用Streamapi进行分组求和,可以使用Collectors.groupby(, Collectors.summingInt())来进行分组求和。

public class Test {public static void main(String[] args) {Student student1 = new Student(1, 1);Student student2 = new Student(1, 1);Student student3 = new Student(2, 2);Student student4 = new Student(2, 3);Student student5 = new Student(3, 3);Student student6 = new Student(3, 4);Student student7 = new Student(4, 1);List<Student> list = Arrays.asList(student1, student2, student3, student4, student5, student6, student7);Map<Integer, Integer> collect = list.stream().collect(Collectors.groupingBy(Student::getId, Collectors.summingInt(Student::getScore)));System.out.println(collect);}
}class Student{private Integer id;private Integer score;
}

Collectors.summingDouble()

Java 8 流的新类 java.util.stream.Collectors 实现了 java.util.stream.Collector 接口,同时又提供了大量的方法对流 ( stream ) 的元素执行 map and reduce 操作,或者统计操作。

Collectors.summingDouble() 方法将流中的所有元素视为 Double类型,并计算所有元素的总和 ( sum )

summingDoubleExample代码

@Test
public void summingDoubleExample() {List<Double> list = Arrays.asList(1.1, 2.2, 3.3, 4.4);Double sum = list.stream().collect(Collectors.summingDouble(i -> {System.out.println("i -> " + i);return i;}));System.out.println(sum);
}

summingLongExample结果

i -> 1.1
i -> 1.1
i -> 2.2
i -> 2.2
i -> 3.3
i -> 3.3
i -> 4.4
i -> 4.4
11.0

运行结果: 结果显示计算平均值时为什么会打印两遍其中的值?

  • 如果在方法体中操作全局变量岂不是操作两遍?? 这不是坑么
  • 如果在方法体中做复杂操作,岂不是两倍??? 巨坑阿
  • 如果在方法体中做判断,判断后改动状态值,改两遍!!
  • ……
  • 用我智慧的大脑一想……没得玩了

注意:

  • 定义List中,也就是生成stream流中的参数要进行类型声明,如果不明确类型,里面还要进行强制转换

  • 由于是Double,值的上限是很明显的,如果想要溢出是很难的,除非有超级大的计算量

    • @Test
      public void summingDoubleExample() {System.out.println(Double.MAX_VALUE);
      }
      //结果为:1.7976931348623157E308  何其之大
      
  • 这就使Double的优势很明显了,其与summingLong|summingInt明显不同

  • 劣势还是很明显的,函数体中计算两次,容易导致其他错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

acer电脑设置u盘启动方法

你们知道acer进入U盘启动系统吗?现在都是流行u盘安装系统了&#xff0c;u盘安装系统都是通过设置u盘启动盘来安装&#xff0c;这就要在BIOS里设置从U盘启动&#xff0c;我知道你们大部分人都知道如何设置&#xff0c;现在就告诉你们acer电脑设置u盘启动方法吧。 一;用快捷热键…

grep -e命令详解_grep中的正则表达式

grep是Linux中用于处理文件的工具之一。grep搜索输入文件&#xff0c;查找与正则表达式匹配的行&#xff0c;并将每个匹配的行标准输出。正则表达式是匹配一组字符串的模式。模式由操作符、构造文字字符和具有特殊意义的元字符组成。grep支持三种正则表达式语法:Basic、Extende…

幼儿课外活动游戏_泰国清迈大小学校介绍 --【Little Star小星星幼儿园】

细数清迈的大小学校&#xff0c;主要分为国际学校和双语学校.一般国际学校的课程设置为10%的泰语&#xff0c;90%的英语&#xff0c;一些中文国际学校设置为20%-30%中文。国际学校可按照学制区分&#xff0c;美制、英制、德制、IB、新加坡等一系列课程。双语学校则为40%的泰语&…

华硕主板如何u盘启动电脑

首先将制作好的U盘启动盘插入到电脑主机USB插口&#xff0c;然后开机&#xff0c;开启电脑后当看到开机画面的时候&#xff0c;连续按下键盘上的“F8”键&#xff0c;将会进入到一个启动项顺序选择的窗口。 进入后的光标默认选择的选项是第一个“硬盘启动”&#xff0c;使用键…

Java8 Stream集合的筛选、归约、分组、聚合详解+案例

文章目录1 Stream概述2 Stream的创建3 Stream的使用案例使用的员工类3.1 遍历/匹配&#xff08;foreach/find/match&#xff09;3.2 筛选&#xff08;filter&#xff09;3.3 聚合&#xff08;max/min/count)3.4 映射(map/flatMap)3.5 归约(reduce)3.6 收集(collect)3.6.1 归集(…

超人汉考克里的机器人_电影《全民超人汉考克》无删减BD/HD高清完整版在线免费观看-新视觉影视...

1.请问哪个平台可以免费在线观看动作片《全民超人汉考克》&#xff1f;电影天堂网网友&#xff1a;《全民超人汉考克》免费在线观看地址2.《全民超人汉考克》是什么时候上映/什么时候开播的&#xff1f;天堂影院网友&#xff1a;2008年&#xff0c;详细日期可以去百度百科查一查…

xp电脑怎么进入bios

按下电源键开机或重新启动计算机&#xff0c;多数电脑会出现品牌LOGO界面&#xff0c;并且提示进入BIOS的按键&#xff0c;进入BIOS按键为DEL&#xff0c;打开Boot Menu启 按下键盘上的DEL键&#xff0c;这时候电脑就会进入BIOS设置主界面&#xff0c;通过↑↓←→方向键选择设…

关于Java:Collectors.summingInt()与mapToInt()与sum()

当您要对流中的整数值求和时&#xff0c;有两种主要的实现方式&#xff1a; ToIntFunction<...> mapFunc ... int sum stream().collect(Collectors.summingInt(mapFunc))int sum stream().mapToInt(mapFunc).sum()第一个涉及对返回的整数进行装箱 纯粹是我的观点&a…

pd调节规律_pid算法原理及调整规律解析

在过程控制中&#xff0c;按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称PID调节器)是应用最为广泛的一种自动控制器。它具有原理简单&#xff0c;易于实现&#xff0c;适用面广&#xff0c;控制参数相互独立&#xff0c;参数的选定比较简单等优点&#xff1b;而且…

uefi启动如何进入

前提是你的主板是12年后出的&#xff0c;支持Uefi功能&#xff0c;我们进入Bios,选择secure boot,选择为enabled 再选择Exit&#xff0c;选到最下面os optimized defaults 选择other os 再点boot&#xff0c;看到UEFI boot 选择enabled启用 开机的时候&#xff0c;按快捷热键…

warning: in the working copy of ‘package-lock.json‘, LF will be replaced by CRLF the next time Git

warning: in the working copy of ‘package-lock.json‘, LF will be replaced by CRLF the next time Git 换行符的问题&#xff0c;Windows下换行符和Unix下的换行符不一样&#xff0c;git会自动转换&#xff0c;但是这样有问题&#xff0c;所以解决方法如下&#xff1a; …

liunx宝塔配置https_宝塔面板安装教程

宝塔面板安装教程原创 计科青年 今天首先登陆阿里云官网登陆你买的阿里云服务器打开服务器控制台&#xff0c;点击购买的服务器&#xff0c;点击实例&#xff0c;就可以看见自己的公网IP。1.下载Xshell6远程连接软件&#xff0c;打开软件点击文件新建这里推荐大家使用Xshell6进…

支援 Chrome 插件:微软 Chromium 内核 Edge 浏览器可以下载啦!

微软筹备已久的 Chromium 版 Edge 浏览器&#xff0c;终于面向 Windows 10 用户开放了首批测试版本&#xff0c;目前属 Canary 的预览版会进行每天更新&#xff0c;所以 bug 而言也会比较多。对于开发者版本则会进行每週更新&#xff0c;预计更为稳定的 beta 公测版会也快将推出…

java用户角色权限管理 只显示姓_快递物流管理系统SSM,JQUERYEASYUI,MYSQL

快递物流管理系统(SSM,JQUERY-EASYUI,MYSQL)(毕业论文27564字,共78页,程序代码,MySQL数据库) 全套项目下载地址: http://woc.xin/WQBgtE【运行环境】 Eclipse, IDEA JDK1.7(JDK1.8) Tomcat7(Tomcat8)【技术栈】 JAVA, JSP, SSM, JQUERY, JQUERY EASYUI, MYSQL, HTML, CSS, JAVA…

微软推行 Windows 10 更新政策 往后不会太强硬要求升级!

Microsoft 以往每月一次为 Windows 系统推出的「月经」性安全更新&#xff0c;以及每半年一次的大规模功能更新都使用户们对 Windows 10 望而却步。原因在于&#xff0c;每次更新都带来大量问题&#xff0c;轻则系统无回应&#xff0c;重则不能开机甚至个人档案被错误删除。而现…

判刑后再上诉会改判吗_近视眼手术后还会再近视反弹吗?有哪些后遗症,温州眼科专家告诉你...

经过几代的更新发展&#xff0c;近视眼手术的技术已相当成熟。激光近视手术受到越来越多近视患者的青睐&#xff0c;飞秒激光近视手术俨然成为目前矫正近视的新潮流。很多人以为&#xff0c;有了近视手术后便不需要注意近视的防控。轻松摘镜的背后&#xff0c;是彻夜狂欢&#…

dev c++调试怎么看变量的值_利用GDB调试 MSQL

原创 张政俊 老叶茶馆来自专辑MySQL修行作者&#xff1a;张政俊就职于中欧基金&#xff0c;知数堂粉丝&#xff0c;数据库爱好者&#xff0c;熟悉RDBMS、nosql、new sql等各类数据库。啃完Oreilly的《高性能mysql》、姜老师的《MySQL技术内幕》&#xff0c;再加上个2,3年的实战…

怎样进入pe重建硬盘

怎样进入pe重建硬盘&#xff0c;一起来了解一下如何进入pe重建硬盘吧。 同时按住winR键打开运行窗口&#xff0c;在运行窗口中输入control&#xff0c;点击确定。 打开控制面板后点击索引选项。 在索引选项界面&#xff0c;点击高级。 点击重建&#xff0c;确定即可。 win7…

案例 自动办公_办公自动化案例教程(双色)(含微课)

办公自动化案例教程(双色)(含微课)ISBN:978-7-5165-1852-6作者&#xff1a;贺鑫 彭卫华 李胜华定价&#xff1a;48.00元出版社&#xff1a;航空工业出版社适用层次&#xff1a;通用出版日期&#xff1a;2020-05-01项目一 使用Word制作常用公文项目描述学习要点任务一 制作行政…

移动硬盘在电脑中怎么打开很慢

在打开移动硬盘时&#xff0c;会卡住很久才打开&#xff0c;这是怎么回事呢?下面分享电脑打开移动硬盘很慢的解决方法。 打开开始&#xff0c;运行中输入&#xff1a;regsvr32 /ushmedia.dll回车即可解决。 regsvr32 /u shmedia.dll是用来解除shmedia.dll文件的注册&#xf…