比较两个数据集合,对比出那些是新增,那些是修改,哪些是删除

有个接口需求,前端点击保存发送到后端的list集合,需要找出其中的新增、修改、删除元素,进行批量操作。 (这里我是拿Student学生类来做比较)

实体类Student

@Data
public class Student {
    private Integer id;
    private String name;
    private String age;
    private String address;
    private String score;
}

具体方法

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
public class NewOldComparer {
    //新增元素集合
    private List<Student> insertIds = new ArrayList<>();
    //修改元素集合
    private List<Student> updateIds = new ArrayList<>();
    //删除元素集合
    private List<Student> deleteIds = new ArrayList<>();
 
    public List<Student> insertIds() {
        return insertIds;
    }
 
    public List<Student> updateIds() {
        return updateIds;
    }
 
    public List<Student> deleteIds() {
        return deleteIds;
    }
 
    public void NewOldComparer(List<Student> newIds, List<Student> oldIds) {
        if (null != newIds && newIds.size() > 0) {
            hasNewIds(newIds, oldIds);
        } else {
            //newIds为空表示后端oldIds全部删除
            noHasNewIds(oldIds);
        }
    }
 
    private void hasNewIds(List<Student> newIds, List<Student> oldIds) {
        if (oldIds.size() == 0) {
            this.insertIds = newIds;
        } else {
            for (Student newId : newIds) {
                //可以根据他有没有传入id 来判断是否为新增的数据  代码要改
                if (newId.getId() == null) {
                    this.insertIds.add(newId);
                } else {
                    this.updateIds.add(newId);
                }
 
            }
            //需要删除的,将页面传过来的新集合的id获取得到List集合
            List<Integer> newidList = newIds.stream().map(Student::getId).collect(Collectors.toList());
            for (Student oldId : oldIds) {
                //如果新集合中不包含就集合元素的id就将其加入到删除集合
                if (!newidList.contains(oldId.getId())) {
                    this.deleteIds.add(oldId);
                }
            }
        }
    }
 
    private void noHasNewIds(List<Student> oldIds) {
        if (null != oldIds && oldIds.size() > 0) {
            this.deleteIds = oldIds;
        }
    }
}

测试类

import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
 
public class OldNewComparerTest {
 
    @Test
    public void tset01() {
        //数据库存在的id
        List<Student> oldIds = new ArrayList<>();
        oldIds.add(new Student(1,"张3","12"));
        oldIds.add(new Student(2,"张4","12"));
        oldIds.add(new Student(3,"张5","12"));
        //页面传入的新id
        List<Student> newIds = new ArrayList<>();
        newIds.add(new Student(1,"张3","12"));
        newIds.add(new Student(2,"张11","12"));
        newIds.add(new Student("张6","12","中国"));
        NewOldComparer newOldComparer = new NewOldComparer();
        newOldComparer.NewOldComparer(newIds,oldIds);
 
        System.out.println("需要新增的元素有-->" + newOldComparer.insertIds());
        System.out.println("需要修改的元素有-->" + newOldComparer.updateIds());
        System.out.println("需要删除的元素有-->" + newOldComparer.deleteIds());
    }
 
}

结果

需要新增的id有-->[Student(id=null, name=6, age=12, address=中国, score=null, clound_kh=null, testName=null)]
需要修改的id有-->[Student(id=1, name=3, age=12, address=null, score=null, clound_kh=null, testName=null), Student(id=2, name=11, age=12, address=null, score=null, clound_kh=null, testName=null)]
需要删除的id有-->[Student(id=3, name=5, age=12, address=null, score=null, clound_kh=null, testName=null)]
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你有两个泛型为 Map 的 List 集合,并且需要筛选它们中不同的数据,你可以按照以下步骤进行: 1. 遍历第一个 List 集合,将其中每个元素的值与第二个 List 集合中的元素进行比较。 2. 如果第二个 List 集合中不存在与第一个集合中相同的元素,将其加入到一个新的 List 集合中。 3. 遍历完第一个 List 集合后,新的 List 集合中就存储了两个集合中不同的数据。 4. 重复上面的过程,遍历第二个 List 集合,将其中不存在于第一个 List 集合中的元素加入到新的 List 集合中。 下面是一个示例代码: ``` List<Map<String, Object>> list1 = new ArrayList<>(); List<Map<String, Object>> list2 = new ArrayList<>(); List<Map<String, Object>> result = new ArrayList<>(); // 假设两个集合中已经存储了数据 // 遍历第一个 List 集合,查找与第二个集合中不同的元素 for (Map<String, Object> map : list1) { boolean isExist = false; for (Map<String, Object> m : list2) { if (map.equals(m)) { isExist = true; break; } } if (!isExist) { result.add(map); } } // 遍历第二个 List 集合,查找与第一个集合中不同的元素 for (Map<String, Object> map : list2) { boolean isExist = false; for (Map<String, Object> m : list1) { if (map.equals(m)) { isExist = true; break; } } if (!isExist) { result.add(map); } } ``` 这个代码示例中,假设两个集合中存储的是 Map 类型的元素,你可以根据实际情况调整集合的泛型。同时,在比较两个 Map 元素是否相同时,需要实现 Map 对象的 equals 方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值