List集合資料去重
阿新 • • 發佈:2021-11-17
對list資料去重的方法有如下幾種,先以String型別的集合進行說明,物件的元素比較麻煩:
定義的集合如下:
List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); list.add("5"); list.add("3"); list.add("2"); list.add("4");
1.藉助Set的特性進行去重
set集合中的元素是不可重複的。不會保持原來的順序
public static List<String> distinctList(List<String> list) { List<String> newList = new ArrayList(); if (null != list && list.size() > 0) { Set set = new HashSet(); set.addAll(list); newList.addAll(set); } return newList; }
這種情況不會保持原來順序,原因是set是無序的。
2.利用set集合特性保持順序一致去重
在建立list集合時傳入LinkedhashSet,會保持原來的順序
public static List<String> distinctList(List<String> list) { List<String> newList = new ArrayList(); if (null != list && list.size() > 0) { newList = new ArrayList<>(new LinkedHashSet<>(list)); } return newList; }
當然可使用這種方式對元素是物件的集合進行去重:
public static void main(String[] args) { List<User> list = new ArrayList<>(); list.add(new User(1,"admin")); list.add(new User(2,"zhailiu")); list.add(new User(3,"lisi")); list.add(new User(1,"admin")); list.add(new User(3,"zhangsan")); list.add(new User(1,"admin")); list = new ArrayList<>(new LinkedHashSet<>(list)); }
其中User物件如下:
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class User { private Integer id; private String name; }
需要注意的是,使用這種方式,必須重寫equals與hashCode方法。(可藉助lombok外掛來重寫)
3.使用Java8特性去重
使用java8集合的新特性stream的distinct()方法。可保持原來的順序
public static List<String> distinctList(List<String> list) { List<String> newList = new ArrayList(); if (null != list && list.size() > 0) { newList = list.stream().distinct().collect(Collectors.toList()); } return newList; }
當然對於物件的去重也可以使用這種方式:
public static void main(String[] args) { List<User> list = new ArrayList<>(); list.add(new User(1,"admin")); list.add(new User(2,"zhailiu")); list.add(new User(3,"lisi")); list.add(new User(1,"admin")); list.add(new User(3,"zhangsan")); list.add(new User(1,"admin")); list = list.stream().distinct().collect(Collectors.toList()); }
前提是重寫物件的equals與hashCode方法。
4.遍歷集合進行判斷
遍歷後判斷是否包含,而賦給另一個list集合。可保持原來的順序
public static List<String> distinctList(List<String> list) { List<String> newList = new ArrayList(); if (null != list && list.size() > 0) { for (String str : list) { if (!newList.contains(str)) { newList.add(str); } } } return newList; }
這種方式在複雜型別時可能會使用。
就是這麼簡單,你學廢了嗎?感覺有用的話,給筆者點個贊吧 !