• Java 工具类 列表动态维护


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

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

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

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

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

    工具类如下:

    1. import java.util.List;
    2. import java.util.Set;
    3. import java.util.function.Function;
    4. import java.util.stream.Collectors;
    5. /**
    6. * @author SUN
    7. * @date 2023/10/28
    8. */
    9. public class DynamicUpdateListUtil {
    10. /**
    11. * 获取需要更新的数据
    12. * @param allList 原来的全部数据,将目前数据的数据查出来 传过来
    13. * @param handlerList 当前请求的数据列表,也就是前端接口传来的最新 list
    14. * @param column 唯一标识列,一般传 id
    15. * @return 返回需要更新的列表【addList:直接插入数据库;updateList:直接更新;deleteList:直接删除的】
    16. * @param 操作的 list 里面的对象类型
    17. */
    18. public static DynamicUpdateList get(List allList, List handlerList, Function column) {
    19. DynamicUpdateList objectDynamicUpdateList = new DynamicUpdateList<>();
    20. Set handlerSet = handlerList.stream().map(column).collect(Collectors.toSet());
    21. Set allSet = allList.stream().map(column).collect(Collectors.toSet());
    22. // 本次要删除的
    23. List deleteList = allList.stream().filter(all -> !handlerSet.contains(column.apply(all))).toList();
    24. // 本次要添加的
    25. List addList = handlerList.stream().filter(handler -> !allSet.contains(column.apply(handler))).toList();
    26. // 本次要更新的
    27. List updateList = handlerList.stream().filter(handler -> allSet.contains(column.apply(handler))).toList();
    28. objectDynamicUpdateList.setAddList(addList);
    29. objectDynamicUpdateList.setUpdateList(updateList);
    30. objectDynamicUpdateList.setDeleteList(deleteList);
    31. return objectDynamicUpdateList;
    32. }
    33. public static class DynamicUpdateList {
    34. /**
    35. * 本次需要新增的数据
    36. */
    37. private List addList;
    38. /**
    39. * 本次需要更新的数据
    40. */
    41. private List updateList;
    42. /**
    43. * 本次需要删除的数据
    44. */
    45. private List deleteList;
    46. public List getAddList() {
    47. return addList;
    48. }
    49. public void setAddList(List addList) {
    50. this.addList = addList;
    51. }
    52. public List getUpdateList() {
    53. return updateList;
    54. }
    55. public void setUpdateList(List updateList) {
    56. this.updateList = updateList;
    57. }
    58. public List getDeleteList() {
    59. return deleteList;
    60. }
    61. public void setDeleteList(List deleteList) {
    62. this.deleteList = deleteList;
    63. }
    64. @Override
    65. public String toString() {
    66. return "DynamicUpdateList: " + "\n addList=" + addList + " \n updateList=" + updateList + " \n deleteList="
    67. + deleteList;
    68. }
    69. }
    70. }

    用法

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

    1. import java.util.List;
    2. public class Main {
    3. public static void main(String[] args) {
    4. User user1 = new User(1L, "user1");
    5. User user1_1 = new User(1L, "user2");
    6. User user2 = new User(2L, "user2");
    7. User user3 = new User(3L, "user3");
    8. List allList = List.of(user1, user2, user3);
    9. List update = List.of(user1_1, user2);
    10. DynamicUpdateListUtil.DynamicUpdateList dynamicUpdateList = DynamicUpdateListUtil.get(allList, update,
    11. User::getId);
    12. List addList = dynamicUpdateList.getAddList();
    13. List updateList = dynamicUpdateList.getUpdateList();
    14. List deleteList = dynamicUpdateList.getDeleteList();
    15. System.out.println(dynamicUpdateList);
    16. }
    17. }

    User.Java 测试用的

    1. /**
    2. * @author SUN
    3. * @date 2023/10/28
    4. */
    5. public class User {
    6. private Long id;
    7. private String name;
    8. public User() {
    9. }
    10. public User(Long id, String name) {
    11. this.id = id;
    12. this.name = name;
    13. }
    14. public Long getId() {
    15. return id;
    16. }
    17. public void setId(Long id) {
    18. this.id = id;
    19. }
    20. public String getName() {
    21. return name;
    22. }
    23. public void setName(String name) {
    24. this.name = name;
    25. }
    26. @Override
    27. public String toString() {
    28. return "User{" + "id=" + id + ", name='" + name + '\'' + '}';
    29. }
    30. }

  • 相关阅读:
    大数据安全 | 【实验】DES加密解密
    微信小程序毕业设计 电影购票+后台管理系统
    光栅和矢量图像处理:Graphics Mill 11.4.1 Crack
    微服务开发中,使用AOP和自定义注解实现对权限的校验
    考研算法题练习2022.11.13
    构建可维护的大规模应用:框架架构的最佳实践
    Python语言程序设计 习题7
    Lazada双11大促玩法规则解读,2022备战清单来袭!
    【数据结构与算法】堆&&堆排序(堆是一种数据结构).
    Kafka学习笔记(二)
  • 原文地址:https://blog.csdn.net/weixin_42195284/article/details/134097829