stream对多个字段分组_Java8 stream 中利用 groupingBy 进行多字段分组
1、利用stream对数据进行分组并求和
public static void main(String[] args) {
List items = Arrays.asList("apple", "apple", "banana", "apple", "orange", "banana", "papaya");
// Map map = items.stream().collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));
Map map = items.stream().collect(Collectors.groupingBy(t->t,Collectors.counting()));
System.out.println(JSON.toJSONString(map));
}
输出结果:{"papaya":1,"orange":1,"banana":2,"apple":3}
2、
在实际需求中,我们可能需要对一组对象进行分组,而且分组的条件有多个。比如对国家和产品类型进行双重分组,一种比较复杂的方法是先对产品类型进行分组,然后对每一个产品类型中的国际名进行分组求和。
转换前的对象:
@Data
public class GameMusicVO implements Serializable {
/**
* 游戏Id
**/
private Integer gameId;
/**
* 音乐Id
**/
private Integer musicId;
/**
* 音乐code
**/
private String musicCode;
/**
* 音乐配置名称
**/
private String codeName;
/**
* 音乐名称
**/
private String musicName;
/**
* 音乐大小
**/
private Float size;
/**
* 音乐长度
**/
private Long timeLength;
/**
* 存储的路径
**/
private String path;
/**
* 是否选中
**/
private String value;
}
转换后的格式:
@Datapublic class GameNewMusicVO implementsSerializable {/*** 音乐code
**/
privateString code;/*** 音乐配置名称
**/
privateString codeName;/*** 音乐列表
**/
private Listchildren;
}
转换代码:
List musicList = new ArrayList<>();//自己添加list
Map> menuGroupMap =musicList.stream().collect(Collectors.groupingBy(GameMusicVO::getMusicCode));
List musicNewVOList = menuGroupMap.keySet().stream().map(key ->{
GameNewMusicVO temp= newGameNewMusicVO();
temp.setCode(key);
//这里虽然code与codeName是一对一,但还需要再查询一次。
//temp.setCodeName(GameStringUtils.matchCodeName(key,musicCodeVOList));
temp.setChildren(menuGroupMap.get(key));returntemp;
}).collect(Collectors.toList());
优化代码:
Map> menuGroupMap = musicList.stream().collect(Collectors.groupingBy(v -> v.getMusicCode() + "_" + v.getMusicName()));
List musicNewVOList = menuGroupMap.keySet().stream().map(key -> {
String[] keyArr = key.split("_");
String code = keyArr[0];
String codeName = keyArr[1];
GameNewMusicVO temp = new GameNewMusicVO();
temp.setCode(code);
temp.setCodeName(codeName);
temp.setChildren(menuGroupMap.get(key));
return temp;
}).collect(Collectors.toList());
stream对多个字段分组_Java8 stream 中利用 groupingBy 进行多字段分组相关推荐
- mysql中利用sql语句修改字段名称,字段长度等操作(亲测)
在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的m ...
- java 多字段分组_java8 stream统计、汇总、多字段分组、多个列汇总统计
前言 本文将展示groupingBy收集器的多个示例,阅读本文需要先准备Java Stream和Java收集器Collector的知识. 一.GroupingBy收集器 Java8的Stream AP ...
- java 实体 text字段,如何在Java中修剪对象的某些字段?
小编典典 假设你有三个字段f1,f2,f3中class A 创建一个新class B的字段f1 声明一个方法class A是这样 public B getTrimmedObject() 从A设置B的必 ...
- mysql字段重命名_MySQL中使用SQL语句对字段进行重命名
MySQL中,如何使用SQL语句来对表中某一个字段进行重命名呢?我们将使用alter table 这一SQL语句. 重命名字段的语法为:alter table change . 现在我们来尝试把tes ...
- mysql 修改字段长度 合并语句_mysql中利用sql语句修改字段名称,字段长度等操作...
1.修改字段的长度 语法: ALTER TABLE 表名 MODIFY COLUMN 字段名 数据类型(修改后的长度) 例子: 将字段的长度由10改为20 ALTER TABLE attence M ...
- stream对多个字段分组_java8 stream 如何按多字段分组,并对一个字段求和
第一次回答,希望能帮到你 User类: class User { String name; String phone; String address; Long scope; public User( ...
- c++中利用STL实现公司员工分组问题
#include<iostream>using namespace std; #include<vector> #include<string> #include& ...
- 此处不允许使用分组函数_Excel中使用Vlookup函数实现数据分组
Vlookup匹配函数:在表格的首列查找指定的数据,并返回指定的数据所在行中的指定列处的单元格内容. 该函数的语法规则如下: VLOOKUP(lookup_value,table_array,col_ ...
- mysql查询包含字符串的记录,MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法...
首先我们建立一张带有逗号分隔的字符串. CREATE TABLE test(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),pname VARCH ...
最新文章
- 中国AI服务器,刷新全球18项性能基准测试纪录
- python的爬虫功能如何实现
- Linux rpm命令详解
- 韩顺平java作业题_韩顺平java作业
- C语言编程题:阶乘计算
- lstm 做航迹预测预测_用lstm预测酒店收入的第一步
- educoder算法设计与分析 实验三 动态规划实验
- 前端视频插件Video.js的基本使用
- Android MeasureSpec详解
- 小米手机扩容教程_小米笔记本硬盘扩容教程:5分钟搞定,存储容量瞬间翻倍...
- 基于Android的模拟手机银行的开发与设计
- C语言中空白字符与空字符的区别
- python 为女神编朵玫瑰花的代码,python绘制玫瑰的代码
- 【金猿人物展】树根互联COO黄路川:从“灯塔工厂”到“数字领航”,工业互联网操作系统助推新型工业化...
- 材料科学与工程毕业论文题目【313个】
- 22 信息系统安全管理
- RedisTemplate常用操作工具类封装,实现一个函数添加,删除,更新及对应批量操作
- UI界面布局有哪些?
- js判断页面滚动方向
- Stewart平台运动学
热门文章
- 《数字经济 科技向善》大咖对谈干货来啦
- IOS 动态获取键盘高度
- 计算机丢失physxloader.dll,physxloader.dll
- Matlab scatter/plot绘制图时,单点的'MarkerSize'与空间位置的关系
- 非侵入式负载监控(Non-intrusive load monitoring NILM)
- oracle 按照字母排序,MySQL、Oracle、DB2等数据库常规排序、自定义排序和按中文拼音字母排序...
- 区块链框架:迅雷链VS石墨烯
- 玩转apng实现动画效果
- Selenium之模拟登录铁路12306
- 移动web端页面如何调用手机QQ?