zoukankan      html  css  js  c++  java
  • Java将多个list对象根据属性分组后合并成一个新的集合

    package com.lqm.collection;
    
    import java.util.*;
    import java.util.stream.Collectors;
    
    /**
     * @ProjectName: algorithm
     * @Package: com.*.collection
     * @ClassName: Test4
     * @Author: ***
     * @Description:
     * @Date: 2021/5/19 9:47
     * @Version: 1.0
     */
    public class Test4 {
    
        public static void main(String[] args) {
            List<TimeCount> list1 = new ArrayList<>();
            TimeCount tc11 = new TimeCount("2021-01-06", 1);
            TimeCount tc12 = new TimeCount("2021-01-16", 1);
            list1.add(tc11);
            list1.add(tc12);
    
            List<TimeCount> list2 = new ArrayList<>();
            TimeCount tc21 = new TimeCount("2021-01-11", 1);
            TimeCount tc22 = new TimeCount("2021-01-14", 1);
            TimeCount tc23 = new TimeCount("2021-01-28", 1);
            TimeCount tc24 = new TimeCount("2021-01-29", 1);
            TimeCount tc25 = new TimeCount("2021-01-30", 1);
            list2.add(tc21);
            list2.add(tc22);
            list2.add(tc23);
            list2.add(tc24);
            list2.add(tc25);
    
            List<TimeCount> list3 = new ArrayList<>();
            TimeCount tc31 = new TimeCount("2021-01-06", 1);
            TimeCount tc32 = new TimeCount("2021-01-11", 1);
            TimeCount tc33 = new TimeCount("2021-01-28", 1);
            TimeCount tc34 = new TimeCount("2020-01-30", 1);
            list3.add(tc31);
            list3.add(tc32);
            list3.add(tc33);
            list3.add(tc34);
    
    
            Map<String, List> map = new HashMap<>();
            for (String s : list1.stream().map(o -> o.getTime()).collect(Collectors.toList())) {
                map.put(s, null);
            }
            for (String s : list2.stream().map(o -> o.getTime()).collect(Collectors.toList())) {
                map.put(s, null);
            }
            for (String s : list3.stream().map(o -> o.getTime()).collect(Collectors.toList())) {
                map.put(s, null);
            }
    
            for (String s : map.keySet()) {
                List result = new ArrayList();
                List<TimeCount> t1 = list1.stream().filter(o -> o.getTime().equals(s)).collect(Collectors.toList());
    
    
                if (t1.size() == 0) {
                    result.add(0);
                } else {
                    result.add(t1.get(0).getCount());
                }
    
                List<TimeCount> t2 = list2.stream().filter(o -> o.getTime().equals(s)).collect(Collectors.toList());
                if (t2.size() == 0) {
                    result.add(0);
                } else {
                    result.add(t2.get(0).getCount());
                }
    
                List<TimeCount> t3 = list3.stream().filter(o -> o.getTime().equals(s)).collect(Collectors.toList());
                if (t3.size() == 0) {
                    result.add(0);
                } else {
                    result.add(t3.get(0).getCount());
                }
                map.put(s, result);
            }
    
         //按照map中的key进行升序排序 Map
    <String, List> sortedMap = map.entrySet().stream() .sorted(Map.Entry.comparingByKey()) .collect( Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (oldVal, newVal) -> oldVal, LinkedHashMap::new ) ); sortedMap.forEach((k, v) -> System.out.println("key:" + k + "value:" + v)); } }
    package com.lqm.collection;
    
    /**
     * @ProjectName: algorithm
     * @Package: com.*.collection
     * @ClassName: TimeCount
     * @Author: ***
     * @Description:
     * @Date: 2021/5/19 10:07
     * @Version: 1.0
     */
    public class TimeCount {
    
        private String time;
        private Integer count;
    
        public TimeCount(String time, Integer count) {
            this.time = time;
            this.count = count;
        }
        public String getTime() {
            return time;
        }
    
        public void setTime(String time) {
            this.time = time;
        }
    
        public Integer getCount() {
            return count;
        }
    
        public void setCount(Integer count) {
            this.count = count;
        }
        @Override
        public String toString() {
            return "TimeCount{" +
                    "time='" + time + '\'' +
                    ", count=" + count +
                    '}';
        }
    }

    输出结果:

    key:2020-01-30value:[0, 0, 1]
    key:2021-01-06value:[1, 0, 1]
    key:2021-01-11value:[0, 1, 1]
    key:2021-01-14value:[0, 1, 0]
    key:2021-01-16value:[1, 0, 0]
    key:2021-01-28value:[0, 1, 1]
    key:2021-01-29value:[0, 1, 0]
    key:2021-01-30value:[0, 1, 0]
  • 相关阅读:
    【WebService】WebService之WSDL文档深入分析(三)
    Android开发——发布第三方库到JitPack上
    Android破解学习之路(七)—— 乐秀视频编辑 内购破解 专业版 价值40元的破解
    Android破解心得——记学习七少月安卓大型安全公开课
    【转】Android播放音频MediaPlayer的几种方式介绍
    Android开发——EditText的属性使用
    Android开发——Fragment的简单使用总结
    Android开发——签名包的生成
    Android Stuido xml使用app属性没有提示代码
    Android开发——设置界面的创建
  • 原文地址:https://www.cnblogs.com/mylqm/p/14813728.html
Copyright © 2011-2022 走看看