政务网站信息化建设情况汇报,南宁做网站公司必荐云尚网络,商派商城网站建设二次开发,免费信息发布网有哪些原本需求#xff1a;一个二级 list 更新功能。
常规实现#xff1a;先删除原来的全部数据#xff0c;再重新插入#xff0c;这样就很耗时了#xff0c;所以这里写一个工具类出来。
1. 如果有新增的数据#xff1a;仅对这些数据新增
2. 如果有删除的数据#xff1a;仅…原本需求一个二级 list 更新功能。
常规实现先删除原来的全部数据再重新插入这样就很耗时了所以这里写一个工具类出来。
1. 如果有新增的数据仅对这些数据新增
2. 如果有删除的数据仅删除这些数据
3. 其他的话就是更新了。 工具类如下
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 T 操作的 list 里面的对象类型*/public static T DynamicUpdateListT get(ListT allList, ListT handlerList, FunctionT, ? column) {DynamicUpdateListT objectDynamicUpdateList new DynamicUpdateList();Set? handlerSet handlerList.stream().map(column).collect(Collectors.toSet());Set? allSet allList.stream().map(column).collect(Collectors.toSet());// 本次要删除的ListT deleteList allList.stream().filter(all - !handlerSet.contains(column.apply(all))).toList();// 本次要添加的ListT addList handlerList.stream().filter(handler - !allSet.contains(column.apply(handler))).toList();// 本次要更新的ListT 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 DynamicUpdateListT {/*** 本次需要新增的数据*/private ListT addList;/*** 本次需要更新的数据*/private ListT updateList;/*** 本次需要删除的数据*/private ListT deleteList;public ListT getAddList() {return addList;}public void setAddList(ListT addList) {this.addList addList;}public ListT getUpdateList() {return updateList;}public void setUpdateList(ListT updateList) {this.updateList updateList;}public ListT getDeleteList() {return deleteList;}public void setDeleteList(ListT deleteList) {this.deleteList deleteList;}Overridepublic 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);ListUser allList List.of(user1, user2, user3);ListUser update List.of(user1_1, user2);DynamicUpdateListUtil.DynamicUpdateListUser dynamicUpdateList DynamicUpdateListUtil.get(allList, update,User::getId);ListUser addList dynamicUpdateList.getAddList();ListUser updateList dynamicUpdateList.getUpdateList();ListUser 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;}Overridepublic String toString() {return User{ id id , name name \ };}
}