枫枫枫枫枫枫枫 2022-11-29 19:49 采纳率: 50%
浏览 90
已结题

java 2个list合并,如果id相同的对象则属性合并到一起,不同id的对象也要保留

问题遇到的现象和发生背景

想要两个list合并成同一个list,然后再当前list中相同id属性的对象进行合并,不同的也要保留

用代码块功能插入代码,请勿粘贴截图
List<Info> list1 = new ArrayList<>();
        Info info1 = new Info();
        info1.setId(1);
        info1.setCount1(100);
        Info info2 = new Info();
        info2.setId(2);
        info2.setCount1(200);
        Info info3 = new Info();
        info3.setId(3);
        info3.setCount1(300);
        list1.add(info1);
        list1.add(info2);
        list1.add(info3);

        List<Info> list2 = new ArrayList<>();
        Info info4 = new Info();
        info4.setId(1);
        info4.setCount2(100);
        Info info5 = new Info();
        info5.setId(2);
        info5.setCount2(200);
        Info info6 = new Info();
        info6.setId(4);
        info6.setCount2(400);
        list2.add(info4);
        list2.add(info5);
        list2.add(info6);

 
@Data
public class Info{
    private Integer id;
    private BigDecimal count1;
    private BigDecimal count2;
}
 
我的解答思路和尝试过的方法

我尝试根据id合并为同一个list,但是不同id的无法保留下来
例 处理完的list:[Info(id=1, count1=100, count2=100), Info(id=2, count1=200, count2=200)]
之后在根据处理完的list跟原list1,list2取差集

我想要达到的结果

最好合并后都进行保留
[Info(id=1, count1=100, count2=100), Info(id=2, count1=200, count2=200), Info(id=3, count1=300, count2=null), Info(id=4, count1=null, count2=400)]

  • 写回答

5条回答 默认 最新

  • 游一游走一走 2022-11-29 20:18
    关注
    import lombok.Data;
    
    import java.math.BigDecimal;
    import java.util.ArrayList;
    import java.util.List;
    
    @Data
    public class Info {
        private Integer id;
        private Integer count1;
        private Integer count2;
    
        public static void main(String[] args) {
            List<Info> list1 = new ArrayList<>();
            Info info1 = new Info();
            info1.setId(1);
            info1.setCount1(100);
            Info info2 = new Info();
            info2.setId(2);
            info2.setCount1(200);
            Info info3 = new Info();
            info3.setId(3);
            info3.setCount1(300);
            list1.add(info1);
            list1.add(info2);
            list1.add(info3);
    
            List<Info> list2 = new ArrayList<>();
            Info info4 = new Info();
            info4.setId(1);
            info4.setCount2(100);
            Info info5 = new Info();
            info5.setId(2);
            info5.setCount2(200);
            Info info6 = new Info();
            info6.setId(4);
            info6.setCount2(400);
            list2.add(info4);
            list2.add(info5);
            list2.add(info6);
    
            labe1:
            for (int i = 0; i < list2.size(); i++) {
                Info info_2 = list2.get(i);
                for (int j = 0; j < list1.size(); j++) {
                    Info info_1 = list1.get(j);
                    if (info_2.getId().equals(info_1.getId())) {
                        if (info_2.getCount1() != null) {
                            info_1.setCount1(info_2.getCount1());
                        }
                        if (info_2.getCount2() != null) {
                            info_1.setCount2(info_2.getCount2());
                        }
                        continue labe1;
                    }
                }
                list1.add(info_2);
            }
    
            System.out.println(list1);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 12月8日
  • 已采纳回答 11月30日
  • 修改了问题 11月29日
  • 修改了问题 11月29日
  • 展开全部

悬赏问题

  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 MATLAB中streamslice问题
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 51单片机中C语言怎么做到下面类似的功能的函数(相关搜索:c语言)
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端