吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2645|回复: 13
收起左侧

[Java 转载] List 去除重复数据

[复制链接]
YVKG 发表于 2021-12-6 10:41

List 去除重复数据

去除 Java 中 ArrayList 中的重复数据

一、使用 LinkedHashSet 删除 ArrayList 中的重复数据

LinkedHashSet 是在一个 ArrayList 删除重复数据的最佳方法。LinkedHashSet 在内部完成两件事:

  • 删除重复数据
  • 保持添加到其中的数据的顺序
    public static void removeDuplicateOne(List<String> list) {
        LinkedHashSet<String> hashSet = new LinkedHashSet<>(list);
        ArrayList<String> listWithoutDuplicates = new ArrayList<>(hashSet);
        System.out.println(listWithoutDuplicates);
    }

二、使用 java8 新特性 stream 进行 List 去重

要从 arraylist 中删除重复项,我们也可以使用 java 8 stream api。使用 steam 的 distinct() 方法返回一个由不同数据组成的流,通过对象的 equals()方法进行比较。

收集所有区域数据 List 使用 Collectors.toList()。

Java 程序,用于在不使用 Set 的情况下从 java 中的 arraylist 中删除重复项。

    public static void removeDuplicateTwo(List<String> list) {
        List<String> listWithoutDuplicates = list.stream().distinct().collect(Collectors.toList());
        System.out.println(listWithoutDuplicates);
    }

三、利用 HashSet 不能添加重复数据的特性 由于 HashSet 不能保证添加顺序,所以只能作为判断条件保证顺序:

    public static void removeDuplicateThree(List<String> list) {
        HashSet<String> set = new HashSet<>(list.size());
        List<String> result = new ArrayList<>(list.size());
        for (String str : list) {
            if (set.add(str)) {
                result.add(str);
            }
        }
        list.clear();
        list.addAll(result);
    }

四、利用 List 的 contains 方法循环遍历, 重新排序, 只添加一次数据, 避免重复:

    public static void removeDuplicateFour(List<String> list) {
        List<String> result = new ArrayList<>(list.size());
        for (String str : list) {
            if (!result.contains(str)) {
                result.add(str);
            }
        }
        list.clear();
        list.addAll(result);
    }

五、双重 for 循环去重

    public static void removeDuplicateFive(List<String> list) {
        for (int i = 0; i < list.size(); i++) {
            for (int j = 0; j < list.size(); j++) {
                if (i != j && Objects.equals(list.get(i), list.get(j))) {
                    list.remove(list.get(j));
                }
            }
        }
    }

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
bing98 + 1 + 1 我很赞同!
momo2021 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

niebaohua 发表于 2021-12-6 13:03
[Java] 纯文本查看 复制代码
List<User> result = users.stream().filter(distinctByKey(User::getName))
                .collect(Collectors.toList());   


 public <T> Predicate<T> distinctByKey (Function<? super T, Object> keyExtractor) {
        ConcurrentHashMap<Object, Boolean> seen = new ConcurrentHashMap<>();
        return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
    }
JuncoJet 发表于 2021-12-6 11:56
w411024 发表于 2021-12-6 11:51
python的大数据的处理跟java没得比

大数据、深度学习教程不都是Python的么
你这么比,你会被卖教程培训机构怼死
JuncoJet 发表于 2021-12-6 11:44
w411024 发表于 2021-12-6 11:51
JuncoJet 发表于 2021-12-6 11:44
Python一句话的事情,set([])

python的大数据的处理跟java没得比
lyj996 发表于 2021-12-6 12:14
感谢分享
niebaohua 发表于 2021-12-6 13:00
一个对象list,根据对象的某个属性进行去重如何实现呢 - -
GiaoMan-wei 发表于 2021-12-6 13:41
python中有一个,,
list1 = [1, 1, 2, 3, 4]
new_list = list(set(list1))
print(new_list)
Squirrel0 发表于 2021-12-6 14:30
秒啊,感谢楼主分享
bing98 发表于 2021-12-6 15:33
感谢楼主分享!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-20 13:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表