開發過程中遇到一個合並去重問題,任務完成后,總結出來一個比較簡單的方法。對於List中不同類型的數據,需要采用不同的處理方式。List中如果是基礎數據類型,直接合並去重即可;如果是對象類型,則需要借助Map去重,這里判斷是否重復的標准為用戶id等區分度高的屬性,如果相等,就屬於重復數據。
測試用例用戶實體類取《一步步搭建 Spring Boot maven 框架的工程》中的User,
再添加一個業務需求細節:如果list1和list2中的數據重復,則客戶姓名以list2為准。
public static void main(String[] args) { List<User> list1 = new ArrayList<>(); User user01 = new User(); user01.setId(1L); user01.setName("Bell"); list1.add(user01); User user02 = new User(); user02.setId(2L); user02.setName("Jack"); list1.add(user02); List<User> list2 = new ArrayList<>(); User user03 = new User(); user03.setId(2L); user03.setName("Tom"); list2.add(user03); User user04 = new User(); user04.setId(3L); user04.setName("Tao"); list2.add(user04); Map<Long, User> target = new HashMap<Long, User>(); if (CollectionUtils.isNotEmpty(list1) && CollectionUtils.isNotEmpty(list2)) {
//把list1放入Map target中,key取用戶id for (User tempUser : list1) { target.put(tempUser.getId(), tempUser); } for (User user2 : list2) { Long userId = user2.getId(); if (target.containsKey(userId)) { User temp = target.get(userId); // 用戶id重復,以list2中的用戶姓名為准
temp.setName(user2.getName()); target.put(userId, temp); } else { target.put(userId, user2); } } } List<User> list = new ArrayList<User>(target.values()); System.out.println("對象數據類型的list合並並且去重結果====>:" + list); } /** * 基礎數據類型的list合並並且去重,業務場景比較簡單 */
private static void intList() { List<Integer> list1 = new ArrayList<Integer>(); list1.add(1); list1.add(2); list1.add(3); list1.add(4); List<Integer> list2 = new ArrayList<Integer>(); list2.add(1); list2.add(4); list2.add(7); list2.add(10); List<Integer> listAll = new ArrayList<Integer>(); listAll.addAll(list1); listAll.addAll(list2); // 去重
listAll = new ArrayList<Integer>(new LinkedHashSet<>(listAll)); System.out.println("方法一:" + listAll); list1.removeAll(list2); list1.addAll(list2); System.out.println("方法二:" + list1); }