java 相关 怎么把两个list用类似left join整合成一个

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

现在有两个list,list1和list2
list1中内容 0 {No:1, name1:40}
1 {No:2, name1:20}
2 {No:3, name1:10}
3 {No:5, name1:30}
4 {No:6, name1:60}
.
list2中内容 0 {No:1, name2:20}
1 {No:2, name2:20}
2 {No:3, name2:10}
3 {No:4, name2:30}
4 {No:8, name2:60}

我想要达到的结果

可以看到两个list中有的No相同,有的只有一个才有
现在需要整合两个list变成一个新的list,若有相同No编号,则变为{No:1,name1:40,name2:20 different:20 }这种格式,different是list1-list2的差额
若无,则{No:2,name1:30,name2:0 different:30}

img

img

参考代码如下:如有帮助望采纳
sql语句

sql语句
   SELECT list1.no,(list1.name-list2.name)different 
                FROM list list1
                left join list list2
                WHERE  list1.no = list2.no

java代码

java代码
public class TEST {
    public static void main(String[] args) {
       
        List<Model1> list1 = new ArrayList();
        List<Model1> list2 = new ArrayList();
        List<Model2> list3= new ArrayList();
        for (int i=0;i<list1.size();i++){
            for (int j=0;j< list2.size();j++){
//判断两个集合no是否相等
               if (list1.get(i).getNo()==list2.get(i).getNo()){
//给第三个集合赋值并计算different
                   Model2 model2=new Model2();
                   model2.setName(list1.get(i).getName());
                   model2.setNo(list1.get(i).getNo());
                   model2.setDifferent(list1.get(i).getName()-list2.get(i).getName());
               list3.add(model2);
               }
            }
        }
        System.out.println(list3);
    }
    
    private static class Model2 {
        Integer no;
        Integer name;
        Integer different;
    
        public Integer getNo() {
            return no;
        }
    
        public void setNo(Integer no) {
            this.no = no;
        }
    
        public Integer getName() {
            return name;
        }
    
        public void setName(Integer name) {
            this.name = name;
        }
    
        public Integer getDifferent() {
            return different;
        }
    
        public void setDifferent(Integer different) {
            this.different = different;
        }
    }
    private static class Model1 {
        Integer no;
        Integer name;
    
        public Integer getNo() {
            return no;
        }
    
        public void setNo(Integer no) {
            this.no = no;
        }
    
        public Integer getName() {
            return name;
        }
    
        public void setName(Integer name) {
            this.name = name;
        }
    }
}