本文主要介绍了java8 stream自定义分组求和并排序的实现,分享给大家,具体如下:

public static void main(String[] args) {

List list = new ArrayList<>();

GroupDetailDTO dto1 = new GroupDetailDTO();

dto1.setHeadsetId(1);

dto1.setTime("2020-01-03");

dto1.setActConcreteTime("a");

dto1.setPlayed(1);

list.add(dto1);

GroupDetailDTO dto2 = new GroupDetailDTO();

dto2.setHeadsetId(1);

dto2.setTime("2020-01-01");

dto2.setActConcreteTime("b");

dto2.setPlayed(1);

list.add(dto2);

GroupDetailDTO dto3 = new GroupDetailDTO();

dto3.setHeadsetId(1);

dto3.setTime("2020-01-02");

dto3.setActConcreteTime("c");

dto3.setPlayed(1);

list.add(dto3);

GroupDetailDTO dto4 = new GroupDetailDTO();

dto4.setHeadsetId(2);

dto4.setTime("2020-01-01");

dto4.setActConcreteTime("d");

dto4.setPlayed(4);

list.add(dto4);

Map collect = list.stream().collect(Collectors.groupingBy(o -> new GroupDetailDTO(o.getHeadsetId(), o.getTime()), TreeMap::new, Collectors.summingInt(o -> o.getPlayed())));

collect.forEach((k, v) -> {

System.out.println(k + "@@@" + v);

});

}

@Data

public class GroupDetailDTO implements Comparable {

private Integer headsetId;

private String actConcreteTime;

private String time;

private Integer played;

public GroupDetailDTO() {

}

public GroupDetailDTO(Integer headsetId, String time) {

this.headsetId = headsetId;

this.time = time;

}

@Override

public int compareTo(GroupDetailDTO o) {

String a = this.headsetId + "|" + this.getTime();

String b = o.getHeadsetId() + "|" + o.getTime();

return a.compareTo(b);

// return this.getTime().compareTo(o.gtTime());

}

}

结果:

上述代码实现对对象GroupDetailDTO按设备和时间分组求played的和,并且按时间排序了。当初想着既然是按时间排序那么compareTo方法直接使用

return this.getTime().compareTo(o.getTime());

但是结果不正确

分析:分组求和时如果使用了排序,那么分组时对相同属性的合并将直接根据compareTo返回的结果合并对象,所以如果用上述方法将产生相同的时间直接合并,而不是new GroupDetailDTO(o.getHeadsetId(), o.getTime())里面的两个属性都相同才合并。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java steam 排序_java8 stream自定义分组求和并排序的实现相关推荐

  1. java stream实现分组BigDecimal求和,自定义分组求和

    前言 随着微服务的发展,越来越多的sql处理被放到java来处理,数据库经常会使用到对集合中的数据进行分组求和,分组运算等等. 那怎么样使用java的stream优雅的进行分组求和或运算呢? 一.准备 ...

  2. stream流倒序排序_java8 stream多字段排序

    注:转载请注明出处!!!!!!! 很多情况下sql不好解决的多表查询,临时表分组,排序,尽量用java8新特性stream进行处理 使用java8新特性,下面先来点基础的 List list; 代表某 ...

  3. java util包排序,利用stream sorted进行降序排序

    根据value值的大小进行降序排序,并进行截取. public static void main(String[] args) { List> list = Lists.newArrayList ...

  4. java 扁平化_java8 stream flatMap流的扁平化操作

    概念:Steam 是Java8 提出的一个新概念,不是输入输出的 Stream 流,而是一种用函数式编程方式在集合类上进行复杂操作的工具.简而言之,是以内部迭代的方式处理集合数据的操作,内部迭代可以将 ...

  5. stream流倒序排序_java8 stream 操作map根据key或者value排序的实现|chu

    引言 最近小编自己一个人在负责一个项目的后台开发,其中有一部分是统计相关的功能,所以需要一些排序或者分组的操作,之前这种操作小编觉得还是比较麻烦的,虽热有一些现成的工具类,但是工具类的写法也是比较复杂 ...

  6. java steam 性能_java8 Steam实战

    java8 Steam实战 假定选定一组专辑,找出其中所有长度大于1分钟的曲目名称 public Set findLongTracks(List albums) { HashSet trackName ...

  7. 分组求和并排序python_【Python】如何对某一列自动分组,统计求和

    V1 V2 0.5 2 0.8 13 0.7 5 0.9 25 1.2 4 - 请问如何按照区间对V2分组(统计最大值到最小值,分成n个区间),统计每个区间中所有V1值的平均数 回答 binning的 ...

  8. Stream流分组求和

    有这么个需求,要计算每个年龄的总分数:如果是用sql的话直接用sql执行,现在用代码执行: 我要求出每个部门的总分数 List<User> list = userService.getUs ...

  9. Java 8中 直接通过List进行分组求和

    // Java8 中 List.stream的分组求和方法Map<String, Long> map = list.stream().collect(Collectors.grouping ...

最新文章

  1. 麦克纳姆轮运动原理_【带字幕视频】麦克纳姆轮你了解多少?ESP32的WIFI信号,居然能覆盖10公里?...
  2. docker 部署 nginx+php+mysql
  3. Django-form表单
  4. Table 表格导出功能
  5. laravel商品图片怎么展示_如何使用Laravel图片处理包intervention-image
  6. SSM三大框架超详细总结(适合你重新回顾)
  7. java nio 文件传输
  8. php判断字段重复,删除完全重复和部分关键字段重复的记录
  9. express+nodecoffee写passport登录验证实例(一)
  10. 深度学习2.0-23.Keras高层接口之CIFAR10自定义网络实战
  11. 【渝粤教育】电大中专学习指南 (2)作业 题库
  12. 计算机硕士工资一览表
  13. 硅谷系创业公司,这家深耕物联网22年的Fabless终于走到上市关口
  14. 推荐一些stm32和DSP的学习视频和教程(资料)
  15. 虚拟示波器-开天斧-STC8H8K64U核心功能实验板测试
  16. TeamTalk服务器
  17. linux远程文件拷贝方式,linux远程拷贝文件
  18. vue集成汉字转拼音并提取首字母(附多音字解决方案)
  19. quartz与数据库相连的更新操作
  20. 蓝牙双向通讯【可自定义协议】SDK

热门文章

  1. python实习做什么工作-面试python实习工作需要注意哪些事项???
  2. python自动测试p-python 自动化测试 pytest 的使用
  3. python培训班时间 费用-Python培训班大概多少钱?老男孩Python培训
  4. python小游戏代码大全-【程序源代码】python贪吃蛇小游戏
  5. 如何下载kaggle上的数据集
  6. 错误:cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp”
  7. LeetCode 3Sum
  8. C#基础-面向对象-多态
  9. web页面实现地图展示,可缩放,标点并点击---使用高德地图
  10. Linux环境搭建Hadoop伪分布模式