java list分组聚合
废话不多说所直接上代码
1. 只对某个属性分组 (personsList为存储实体类的集合)
group by age
Map<Integer,List<Person>> map = personsList.stream().collect(Collectors.groupingBy(Person::getAge));
结果:
2.先分组,再获取所有聚合统计的参数
Map<Integer, DoubleSummaryStatistics> collect = persons.stream().collect(Collectors.groupingBy(Person::getAge,Collectors.summarizingDouble(Person::getSalary)));
结果:
3.先分组,然后对工资聚合
sum(salary)
group by age
Map<Integer, Double> collect1 = persons.stream().collect(Collectors.groupingBy(Person::getAge, Collectors.summingDouble(Person::getSalary)));
结果:
整体代码总体如下:
import java.util.*;
import java.util.stream.Collectors;public class Test {public static void main(String[] args) {List<Person> persons = new ArrayList<>();persons.add(new Person("Brandon", 15, 5000));persons.add(new Person("Braney", 15, 15000));persons.add(new Person("Jack", 10, 5000));persons.add(new Person("Robin", 10, 500000));persons.add(new Person("Tony", 10, 1400000));// 只对 age 分组Map<Integer,List<Person>> map = persons.stream().collect(Collectors.groupingBy(Person::getAge));for (Map.Entry<Integer, List<Person>> entry : map.entrySet()) {System.out.println("分组" +entry);}System.out.println("=======================");// 对age分组 然后取所有的聚合结果集Map<Integer, DoubleSummaryStatistics> collect = persons.stream().collect(Collectors.groupingBy(Person::getAge,Collectors.summarizingDouble(Person::getSalary)));for (Map.Entry<Integer, DoubleSummaryStatistics> entry : collect.entrySet()) {DoubleSummaryStatistics longSummaryStatistics = entry.getValue();System.out.println("----------------key----------------" + entry.getKey());System.out.println("求和:" + longSummaryStatistics.getSum());System.out.println("求平均" + longSummaryStatistics.getAverage());System.out.println("求最大:" + longSummaryStatistics.getMax());System.out.println("求最小:" + longSummaryStatistics.getMin());System.out.println("求总数:" + longSummaryStatistics.getCount());}System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");// 对age分组 然后取求和结果集Map<Integer, Double> collect1 = persons.stream().collect(Collectors.groupingBy(Person::getAge, Collectors.summingDouble(Person::getSalary)));System.out.println(collect1);System.out.println("1");}
}
结果:
分组10=[Person [name=Jack, age=10, salary=5000.0], Person [name=Robin, age=10, salary=500000.0], Person [name=Tony, age=10, salary=1400000.0]]
分组15=[Person [name=Brandon, age=15, salary=5000.0], Person [name=Braney, age=15, salary=15000.0]]
=======================
----------------key----------------10
求和:1905000.0
求平均635000.0
求最大:1400000.0
求最小:5000.0
求总数:3
----------------key----------------15
求和:20000.0
求平均10000.0
求最大:15000.0
求最小:5000.0
求总数:2
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
{10=1905000.0, 15=20000.0}
1
实体类
/*** 要聚合的实体类/
class Person {private String name;private int age;private double salary;public Person(String name, int age, double salary) {super();this.name = name;this.age = age;this.salary = salary;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}public String getNameAndAge() {return this.getName() + "-" + this.getAge();}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ", salary=" + salary+ "]";}
}
java list分组聚合相关推荐
- Java调用ElasticSearch 7.2.1 保存、统计、多字段分组聚合
目录 maven引用 配置 配置类 保存数据方法 参照官方的引用方式会报错 分组统计 查询后再统计 多字段分组聚合 maven引用 注意版本与es版本一致 <dependency>< ...
- Elasticsearch Java API 的使用(13)—分组聚合之一
分组聚和不像度量聚合那样通过字段进行计算,而是根据文档创建分组.每个聚合都关联一个标准(取决于聚合的类型),决定了一个文档在当前的条件下是否会"划入"分组中. 换句话说,分组实际上 ...
- Elasticsearch Java API 分组、聚合、嵌套相关查询
Elasticsearch Java API 分组.聚合.嵌套相关查询 翼支付监控系统正使用es做后端存储,这边我们是将日志计算处理过后的数据通过kafka储存到es.选择用es作为数据储存端是考虑到 ...
- php 聚合和组合,reduce端连接-分区分组聚合(示例代码)
1.1.1 reduce端连接-分区分组聚合 reduce端连接则是利用了reduce的分区功能将stationid相同的分到同一个分区,在利用reduce的分组聚合功能,将同一个st ...
- pandas php,pandas分组聚合代码详解
pandas分组聚合代码详解 本篇文章小编给大家分享一下pandas分组聚合代码详解,对大家学习pandas分组聚合有一定的帮助,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看 ...
- MongoDB多条件分组聚合查询
MongoDB多条件分组聚合查询 1.样例数据 {"_id" : ObjectId("5fa13fb76c3107345a82c047"),"_cla ...
- 最详细最直观的>>>理解Pandas分组聚合和透视图标
写在前面: 突然打开excel看到透视图表, 瞬间理解了pandas中的分组聚合和透视图标的内容.分享给大家,希望给在学习路上的伙伴们少点疑虑. 分组聚合 首先, 创建我们需要的数据 df = pd. ...
- Es elasticsearch 十七 Java api 实现聚合 几个聚合示例 sql 开启许可 新特效 java 实现es7 sql 功能
目录 Java api 实现聚合 依赖 简单聚合按照颜色分组获取每个卖出数量 聚合每个颜色卖出数量,及平均价格(每个分桶子聚合) 按照颜色分组 ,获取销售数量,avg min max sum 按照60 ...
- Python数据清洗小技巧——分组聚合
分组聚合 分组 groupby原理 import numpy as np import pandas as pddf = pd.DataFrame(data = {'sex':np.random.ra ...
最新文章
- 如何解决数据一致性、任务调度、流水号生成等问题?
- c和python的区别动图_C语言与Python 对程序员的差别到底在哪?
- 【C++基础】常见面试问题(二)
- FormsAuthenticationTicket基于forms的验证
- linux环境部署python3+django
- nginx php 没认,NginX没有执行PHP
- 《微信生活白皮书》发布微信用户数据
- HiJson工具 火狐浏览器中的jsonHandle插件(以及乱码问题的解决)--来转换json串的格式
- 【黑灰产犯罪研究】恶意点击
- 机器学习之理解支持向量机SVM
- PADS输出BOM表和位号图(装配图)
- 单元测试、注解、枚举、反射(5)JavaSE
- 计算机公共基础知识总结,计算机公共基础知识总结.docx
- 严恭敏老师PSINS工具箱解读——test_SINS_GPS_153
- (转载)Java反射机制
- 打算抽时间自学一下游戏制作,做一款Mud文字游戏
- ArcGIS制图及出图小技巧——以土地利用图为例
- iOS游戏开发:从创意到实现
- 操作SVN的SHELL
- java计算机毕业设计ssm教师贴心宝的设计与实现