栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java List<Object> 去除重复元素

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java List<Object> 去除重复元素

目录

一、去除List中重复的String

1、借助 Set 的特性进行去重

2、利用set集合特性保持顺序一致去重

3、遍历List集合,将元素添加到另一个List集合中

4、使用Java8特性去重

二、List中对象去重

三、根据对象的属性去重


一、去除List中重复的String

1、借助 Set 的特性进行去重
    
    public static List list distinct(List list) {
        final boolean sta = null != list && list.size() > 0;
        List doubleList= new ArrayList();
        if (sta) {
            Set set = new HashSet();
            set.addAll(list);
            doubleList.addAll(set);
        }
        return doubleList;
    }

  2、利用set集合特性保持顺序一致去重
    
    public static void delRepeat(List list) {
   	     //方法一
        List listNew = new ArrayList(new TreeSet(list));
         //方法二
        List listNew2 = new ArrayList(new linkedHashSet(list));
    }

3、遍历List集合,将元素添加到另一个List集合中
    // 遍历后判断赋给另一个list集合,保持原来顺序
    public static List delRepeat(List list) {
	      List listNew = new ArrayList();
	      for (String str : list) {
	          if (!listNew.contains(str)) {
	              listNew.add(str);
	           }
	      }
	      return listNew ;
    }

4、使用Java8特性去重
List unique = list.stream().distinct().collect(Collectors.toList());

二、List中对象去重

例如 Person类 

public class Person {
   private Long id;
   private String name;
   public Person(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;
   }
   @Override
   public String toString() {
       return "Person{" +
               "id=" + id +
               ", name='" + name + ''' +
               '}';
   }
}

重写Person对象的equals()方法和hashCode()方法:

   @Override
   public boolean equals(Object o) {
       if (this == o) return true;
       if (o == null || getClass() != o.getClass()) return false;
       Person person = (Person) o;
       if (!id.equals(person.id)) return false;
       return name.equals(person.name);
   }
   @Override
   public int hashCode() {
       int result = id.hashCode();
       result = 31 * result + name.hashCode();
       return result;
   }

下面对象去重的代码:

       Person p1 = new Person(1l, "name1");
       Person p2 = new Person(3l, "name2");
       Person p3 = new Person(2l, "name3");
       Person p4 = new Person(4l, "name4");
       Person p5 = new Person(5l, "name5");
       List persons = Arrays.asList(p1, p2, p3, p4, p5, p5, p1, p2, p2);
       List personList = new ArrayList<>();
       // 去重
       persons.stream().forEach(
               p -> {
                   if (!personList.contains(p)) {
                       personList.add(p);
                   }
               }
       );
       System.out.println(personList);

List 的 contains() 方法底层实现使用对象的 equals 方法去比较的,其实重写 equals() 就好,但重写了 equals 最好将 hashCode 也重写了。

三、根据对象的属性去重

根据对象的id去重

public static List removeDupliById(List ps) {
	       Set personSet = new TreeSet<>((o1, o2) -> o1.getUserid().compareTo(o2.getUserid()));
	       personSet.addAll(ps);
	       return new ArrayList<>(personSet);
}
	public static ArrayList removeDuplicteUsers(List courseUserList) {
		Set userset = new TreeSet(new Comparator() {
			@Override
			public int compare(CourseUser o1, CourseUser o2) {
				return o1.getUserid().compareTo(o2.getUserid());
			}
		});
		userset.addAll(courseUserList);
		return new ArrayList(userset);
	}

java 8 

 public static  Predicate distinctByKey(Function keyExtractor) {
       Map map = new ConcurrentHashMap<>();
       return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
 }
    // remove duplicate
       persons.stream().filter(distinctByKey(p -> p.getId())).forEach(p -> System.out.println(p));

自定义拉姆塔表达式:

    List collect = CourseUsers.stream().filter(distinctByKey(CourseUser::getUserid)).collect(Collectors.toList());
		System.out.println(JSONObject.toJSonString(collect));

    
	public static  Predicate distinctByKey(Function keyExtractor) {
		Map seen = new ConcurrentHashMap<>();
		return object -> seen.putIfAbsent(keyExtractor.apply(object), Boolean.TRUE) == null;
	}

参考:去掉重复对象-java8_jiaobuchong的专栏-CSDN博客_list去重">Java List去掉重复对象-java8_jiaobuchong的专栏-CSDN博客_list去重

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号