有个接口需求,前端点击保存发送到后端的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)]

至于字符串类型比较就更容易了直接用contains去判断是否包含元素   

2022.2.22

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐