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 进行多字段分组相关推荐

  1. mysql中利用sql语句修改字段名称,字段长度等操作(亲测)

    在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的m ...

  2. java 多字段分组_java8 stream统计、汇总、多字段分组、多个列汇总统计

    前言 本文将展示groupingBy收集器的多个示例,阅读本文需要先准备Java Stream和Java收集器Collector的知识. 一.GroupingBy收集器 Java8的Stream AP ...

  3. java 实体 text字段,如何在Java中修剪对象的某些字段?

    小编典典 假设你有三个字段f1,f2,f3中class A 创建一个新class B的字段f1 声明一个方法class A是这样 public B getTrimmedObject() 从A设置B的必 ...

  4. mysql字段重命名_MySQL中使用SQL语句对字段进行重命名

    MySQL中,如何使用SQL语句来对表中某一个字段进行重命名呢?我们将使用alter table 这一SQL语句. 重命名字段的语法为:alter table change . 现在我们来尝试把tes ...

  5. mysql 修改字段长度 合并语句_mysql中利用sql语句修改字段名称,字段长度等操作...

    1.修改字段的长度 语法: ALTER TABLE 表名 MODIFY COLUMN 字段名  数据类型(修改后的长度) 例子: 将字段的长度由10改为20 ALTER TABLE attence M ...

  6. stream对多个字段分组_java8 stream 如何按多字段分组,并对一个字段求和

    第一次回答,希望能帮到你 User类: class User { String name; String phone; String address; Long scope; public User( ...

  7. c++中利用STL实现公司员工分组问题

    #include<iostream>using namespace std; #include<vector> #include<string> #include& ...

  8. 此处不允许使用分组函数_Excel中使用Vlookup函数实现数据分组

    Vlookup匹配函数:在表格的首列查找指定的数据,并返回指定的数据所在行中的指定列处的单元格内容. 该函数的语法规则如下: VLOOKUP(lookup_value,table_array,col_ ...

  9. mysql查询包含字符串的记录,MYSQL中利用select查询某字段中包含以逗号分隔的字符串的记录方法...

    首先我们建立一张带有逗号分隔的字符串. CREATE TABLE test(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),pname VARCH ...

最新文章

  1. 中国AI服务器,刷新全球18项性能基准测试纪录
  2. python的爬虫功能如何实现
  3. Linux rpm命令详解
  4. 韩顺平java作业题_韩顺平java作业
  5. C语言编程题:阶乘计算
  6. lstm 做航迹预测预测_用lstm预测酒店收入的第一步
  7. educoder算法设计与分析 实验三 动态规划实验
  8. 前端视频插件Video.js的基本使用
  9. Android MeasureSpec详解
  10. 小米手机扩容教程_小米笔记本硬盘扩容教程:5分钟搞定,存储容量瞬间翻倍...
  11. 基于Android的模拟手机银行的开发与设计
  12. C语言中空白字符与空字符的区别
  13. python 为女神编朵玫瑰花的代码,python绘制玫瑰的代码
  14. 【金猿人物展】树根互联COO黄路川:从“灯塔工厂”到“数字领航”,工业互联网操作系统助推新型工业化...
  15. 材料科学与工程毕业论文题目【313个】
  16. 22 信息系统安全管理
  17. RedisTemplate常用操作工具类封装,实现一个函数添加,删除,更新及对应批量操作
  18. UI界面布局有哪些?
  19. js判断页面滚动方向
  20. Stewart平台运动学

热门文章

  1. 《数字经济 科技向善》大咖对谈干货来啦
  2. IOS 动态获取键盘高度
  3. 计算机丢失physxloader.dll,physxloader.dll
  4. Matlab scatter/plot绘制图时,单点的'MarkerSize'与空间位置的关系
  5. 非侵入式负载监控(Non-intrusive load monitoring NILM)
  6. oracle 按照字母排序,MySQL、Oracle、DB2等数据库常规排序、自定义排序和按中文拼音字母排序...
  7. 区块链框架:迅雷链VS石墨烯
  8. 玩转apng实现动画效果
  9. Selenium之模拟登录铁路12306
  10. 移动web端页面如何调用手机QQ?