加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

【Java】【48】List去重

发布时间:2020-12-15 08:00:31 所属栏目:Java 来源:网络整理
导读:前言: 1,for循环去重 2,hashSet去重 3,Stream去重 正文: // 取ID不重复的数据 public class User { private Integer id; private String name;}List User users = Lists.newArrayList( new User(1,"a" ), new User(1,"b" ), new User(2,"a")); 1,for循

前言:

1,for循环去重

2,hashSet去重

3,Stream去重

正文:

//取ID不重复的数据
public class User {
  private Integer id;
  private String name;
}


List<User> users = Lists.newArrayList(
        new User(1,"a"),new User(1,"b"),new User(2,"a"));

1,for循环去重

public void dis1() {
    List<User> result = new LinkedList<>();
    for (User user : users) {
      boolean b = result.stream().anyMatch(u -> u.getId().equals(user.getId()));
      if (!b) {
        result.add(user);
      }
    }

    System.out.println(result);
}

2,hashSet去重

public void dis2() {
    Set<User> result = new HashSet<>(users);
    System.out.println(result);
}

重写hashcode和equals方法

//user类中
@Override
public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    User user = (User) o;
    return Objects.equals(id,user.id);
}

@Override
public int hashCode() {
    return Objects.hash(id);
}

//Objects.hash()这个方法的源码中
//result = 31 * result + (element == null ? 0 : element.hashCode());

3,Stream去重

public void dis3() {
    users.parallelStream().filter(distinctByKey(User::getId))
        .forEach(System.out::println);
}


public static <T> Predicate<T> distinctByKey(Function<? super T,?> keyExtractor) {
    Set<Object> seen = ConcurrentHashMap.newKeySet();
    return t -> seen.add(keyExtractor.apply(t));
}

Stream有distinct方法,但是没有提供自定义条件,要自定义条件,需要重写hashcode和equals方法,否则可以直接使用

users.parallelStream().distinct().forEach(System.out::println);

参考博客:

Java中对List去重,Stream去重 - Ryan.Miao - 博客园
https://www.cnblogs.com/woshimrf/p/java-list-distinct.html

HashSet的去重问题 - qq_28385797的博客 - CSDN博客
https://blog.csdn.net/qq_28385797/article/details/72834970

如何正确的重写equals() 和 hashCode()方法 - Zone - CSDN博客
https://blog.csdn.net/zzg1229059735/article/details/51498310

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读