Java 工具类 列表动态维护

原本需求:一个二级 list 更新功能。

常规实现:先删除原来的全部数据,再重新插入,这样就很耗时了,所以这里写一个工具类出来。

1. 如果有新增的数据:仅对这些数据新增

2. 如果有删除的数据:仅删除这些数据

3. 其他的话就是更新了。

Java 工具类 列表动态维护_第1张图片

工具类如下:

import java.util.List;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * @author SUN
 * @date 2023/10/28
 */
public class DynamicUpdateListUtil {
    
    
    /**
     * 获取需要更新的数据
     * @param allList 原来的全部数据,将目前数据的数据查出来 传过来
     * @param handlerList 当前请求的数据列表,也就是前端接口传来的最新 list
     * @param column 唯一标识列,一般传 id
     * @return 返回需要更新的列表【addList:直接插入数据库;updateList:直接更新;deleteList:直接删除的】
     * @param  操作的 list 里面的对象类型
     */
    public static  DynamicUpdateList get(List allList, List handlerList, Function column) {
        DynamicUpdateList objectDynamicUpdateList = new DynamicUpdateList<>();
        
        Set handlerSet = handlerList.stream().map(column).collect(Collectors.toSet());
        Set allSet = allList.stream().map(column).collect(Collectors.toSet());
        
        // 本次要删除的
        List deleteList = allList.stream().filter(all -> !handlerSet.contains(column.apply(all))).toList();
        
        // 本次要添加的
        List addList = handlerList.stream().filter(handler -> !allSet.contains(column.apply(handler))).toList();
        
        // 本次要更新的
        List updateList = handlerList.stream().filter(handler -> allSet.contains(column.apply(handler))).toList();
        
        objectDynamicUpdateList.setAddList(addList);
        objectDynamicUpdateList.setUpdateList(updateList);
        objectDynamicUpdateList.setDeleteList(deleteList);
        
        return objectDynamicUpdateList;
    }
    
    
    public static class DynamicUpdateList {
        
        /**
         * 本次需要新增的数据
         */
        private List addList;
        
        /**
         * 本次需要更新的数据
         */
        private List updateList;
        
        /**
         * 本次需要删除的数据
         */
        private List deleteList;
        
        
        public List getAddList() {
            return addList;
        }
        
        public void setAddList(List addList) {
            this.addList = addList;
        }
        
        public List getUpdateList() {
            return updateList;
        }
        
        public void setUpdateList(List updateList) {
            this.updateList = updateList;
        }
        
        public List getDeleteList() {
            return deleteList;
        }
        
        public void setDeleteList(List deleteList) {
            this.deleteList = deleteList;
        }
        
        @Override
        public String toString() {
            return "DynamicUpdateList: " + "\n addList=" + addList + " \n updateList=" + updateList + " \n deleteList="
                    + deleteList;
        }
    }
    
    
}

用法

具体参数如何传,已经写在了工具类的注释中。

import java.util.List;

public class Main {
    
    public static void main(String[] args) {
        User user1 = new User(1L, "user1");
        User user1_1 = new User(1L, "user2");
        User user2 = new User(2L, "user2");
        User user3 = new User(3L, "user3");
        
        List allList = List.of(user1, user2, user3);
        
        List update = List.of(user1_1, user2);
        
        DynamicUpdateListUtil.DynamicUpdateList dynamicUpdateList = DynamicUpdateListUtil.get(allList, update,
                User::getId);
        
        List addList = dynamicUpdateList.getAddList();
        List updateList = dynamicUpdateList.getUpdateList();
        List deleteList = dynamicUpdateList.getDeleteList();
        
        System.out.println(dynamicUpdateList);
    }
    
}

User.Java 测试用的

/**
 * @author SUN
 * @date 2023/10/28
 */
public class User {
    
    private Long id;
    
    private String name;
    
    
    public User() {
    }
    
    public User(Long id, String name) {
        this.id = id;
        this.name = name;
    }
    
    public Long getId() {
        return id;
    }
    
    public void setId(Long id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    @Override
    public String toString() {
        return "User{" + "id=" + id + ", name='" + name + '\'' + '}';
    }
}

你可能感兴趣的:(实现方案,java,windows,python)