zoukankan      html  css  js  c++  java
  • JAVA中List对象去除重复值的方法

      JAVA中List对象去除重复值,大致分为两种情况,一种是List<String>、List<Integer>这类,直接根据List中的值进行去重,另一种是List<User>这种,List中存的是javabean对象,需要根据List中对象的某个值或某几个值进行比较去重。方法如下:

    一、List<String>、List<Integer>对象去重复值。

    这种情况的话,处理起来比较简单,通过JDK1.8新特性stream的distinct方法,可以直接处理。

    1     List<String> list1 = Arrays.asList("a", "b", "c", "a", new String("c"));
    2     list1.stream().distinct().forEach(System.out::println);
    3 
    4     List<Integer> list2 = Arrays.asList(1, 2, 3, 1, new Integer(2));
    5     list2.stream().distinct().forEach(System.out::println);

    二、List<User>对象去重复值。

    这种的话,不能直接比较List中的对象,需要重写bean对象的equals和hashCode方法,然后通过放入Set集合来自动去重,具体例子如下。

    对象实体:

     1 @Data
     2 @AllArgsConstructor
     3 public class User {
     4     private String id;
     5     private String name;
     6     private int age;
     7 
     8     public boolean equals(Object obj) {
     9         User u = (User) obj;
    10         return name.equals(u.name);
    11     }
    12 
    13     public int hashCode() {
    14         String in = name;
    15         return in.hashCode();
    16     }
    17 }

    以上例子中就是通过比较姓名相同,即认为对象相等。

    1     List<User> userList = new ArrayList<>();
    2     userList.add(new User("1", "peter", 18));
    3     userList.add(new User("2", "stark", 25));
    4     userList.add(new User("3", "peter", 22));
    5     
    6     Set<User> userSet = new HashSet<>(userList);
    7     List<User> list = new ArrayList<>(userSet);
    8     list.forEach(System.out::println);

    通过将List放入Set进行自动去重(即使用到上面的equals与hashCode方法),然后重新放回List中即可。

  • 相关阅读:
    cf B. Sereja and Suffixes
    cf E. Dima and Magic Guitar
    cf D. Dima and Trap Graph
    cf C. Dima and Salad
    最短路径问题(floyd)
    Drainage Ditches(网络流(EK算法))
    图结构练习—BFSDFS—判断可达性(BFS)
    Sorting It All Out(拓扑排序)
    Power Network(最大流(EK算法))
    Labeling Balls(拓扑)
  • 原文地址:https://www.cnblogs.com/pcheng/p/10930944.html
Copyright © 2011-2022 走看看