搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

java8 stream自定义分组求和并排序

[复制链接]
查看: 26|回复: 0

1万

主题

1万

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
45253
发表于 2020-1-24 00:14 | 显示全部楼层 |阅读模式
  1.     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);        });    }
复制代码
  1. @Datapublic 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());    }}
复制代码
结果:
java8 stream自定义分组求和并排序  热点新闻 1591463-20200123234043846-1790313229

上述代码实现对工具GroupDetailDTO按装备和时候分组求played的和,而且按时候排序了。当初想着既然是按时候排序那末compareTo方式间接利用
return this.getTime().compareTo(o.getTime());
可是结果不切确
java8 stream自定义分组求和并排序  热点新闻 1591463-20200123234044091-852404266

分析:分组求和时假如利用了排序,那末分组时对类似属性的合并将间接按照compareTo返回的结果合并工具,所以假如用上述方式将发生类似的时候间接合并,而不是new GroupDetailDTO(o.getHeadsetId(), o.getTime())里面的两个属性都类似才合并。

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 全椒百姓网-全椒知名**,发布及时新鲜的全椒新闻资讯 生活信息 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表