对List集合、数组去重

这篇具有很好参考价值的文章主要介绍了对List集合、数组去重。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

还记得在2021我发布的第一篇博客就是关于数组的去重,从那一刻开始,命运的齿轮开始转动……

扯远了哈哈哈,我重新写这篇文章只是想让去重方式更加严谨(ps:我才不会说是因为技术成长了,看不上之前写的了哈哈哈

方式一:

 依据Set集合的特性,使用set去重(最简洁高效)

/**
 * 使用set去重
 *
 * @param list
 */
private void setDistinct(List<String> list) {
    System.out.println("Set 开始去重,条数:" + list.size());
    List<String> listDistinctResult = new ArrayList<>(new HashSet(list));
    System.out.println("Set 去重完毕,条数:" + listDistinctResult.size());
}

方式二:

 使用高级的stream流方式去重(可读性高,效率高)

/**
 * 使用Stream 去重
 *
 * @param list
 */
private void useStreamDistinct(List<String> list) {
    System.out.println("stream 开始去重,条数:" + list.size());
    List<String> listDistinctResult = list.stream().distinct().collect(Collectors.toList());
    System.out.println("stream 去重完毕,条数:" + listDistinctResult.size());
}

方式三:

 使用list.contain去重(效率一般)

/**
 * 使用 list.contain 去重,返回一个新集合
 *
 * @param list
 */
private void listContainDistinct(List<String> list) {
    System.out.println("contains 开始去重,旧集合条数:" + list.size());
    List<String> listDistinctResult = new ArrayList<>();
    for (String str : list) {
        if (!listDistinctResult.contains(str)) {
            listDistinctResult.add(str);
        }
    }
    System.out.println("contains 去重完毕,新集合条数:" + listDistinctResult.size());
}

方式四:

喜闻乐见的for循环去重(最常见,数据量大不建议使用)

/**
 * 使用for循环去重
 * @param list
 */
private void useForDistinct(List<String> list) {
    System.out.println("list 双循环 开始去重,条数:" + list.size());
    for (int i = 0; i < list.size(); i++) {
        for (int j = i + 1; j < list.size(); j++) {
            if (list.get(i).equals(list.get(j))) {
                list.remove(j);
            }
        }
    }
    System.out.println("list 双循环  去重完毕,条数:" + list.size());
}

特殊情况:

以上都是简单的list集合去重,但是当我们遇到一些特殊情况,比如:当一个集合中存的是Map,Map中有一些键值是重复,而我们需要去除这些重复的对象;以上的三种方式就不太适用了,这种情况就只能使用多层级for循环来做了(这种复杂情况应该可以使用stream来做,不过没试过就不说了),当然数据量大的话肯定效率是比较吃紧的,因此如果在不需要数据实时同步的情况下,可以考虑新开线程去执行这个去重然后走之后的业务流程

这种特殊情况的代码如下:文章来源地址https://www.toymoban.com/news/detail-629363.html

/**
     * 数组去重
     * (目前仅针对于前三列相同进行去重;
     * 例如:业务层面来讲:即当用户名,身份证,手机号,邮箱等重要信息都相同时,
     * 去除这一重复数据)
     * 
     * @param dataList
     * @return
     */
    private List<Map<Integer, String>> removeSameMapData(List<Map<Integer, String>> dataList) {
        int i = 0;
        List<Map<Integer, String>> distinctList = new ArrayList<>();
        for (Map<Integer, String> map : dataList) {
            boolean isDuplicate = false;
            for (Map<Integer, String> distinctMap : distinctList) {
                for (Map.Entry<Integer, String> entry : map.entrySet()) {
                    Integer key = entry.getKey();
                    if (key <= 3 && StringUtils.equals(map.get(key), distinctMap.get(key))){
                        i ++;
                    }
                    if (i >= 3){
                        i = 0;
                        isDuplicate = true;
                        break;
                    }
                }
            }
            if (!isDuplicate) {
                distinctList.add(map);
            }
        }
        return distinctList;
    }

到了这里,关于对List集合、数组去重的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中List集合对象去重及按属性去重的8种方法

    是大家最容易想到的,先把List数据放入Set,因为Set数据结构本身具有去重的功能,所以再将SET转为List之后就是去重之后的结果。这种方法在去重之后会改变原有的List元素顺序,因为HashSet本身是无序的,而TreeSet排序也不是List种元素的原有顺序。 去重后的集合: [kobe, james,

    2024年04月15日
    浏览(136)
  • Java 1.8 List集合排序、去重、分组、过滤、合并、截取操作

    1、正序 2、逆序 3、根据某个属性或多个属性排序 多个属性排序:需要添加排序条件就在后面添加.thenComparing(UserVO::getxxx),它是在上一个条件的基础上进行排序 1、去重 2、根据某个属性去重(它将该字段还进行排序了) 3、根据某个属性去重(这个方法没有排序) 4、对多个

    2024年02月01日
    浏览(71)
  • JAVA8 获取list集合中重复的元素和获取去重数据

    1.java8获取list集合中重复的元素 2.java8根据List对象属性获取重复数据和获取去重后数据 2.1获取重复数据 结果: 根据多个属性获取重复数据,还在摸索中,欢迎大家来指点!!!!! 2.2获取去重后数据 结果:

    2024年02月12日
    浏览(55)
  • Java List集合去重、过滤、分组、获取数据、求最值、合并、排序、跳数据和遍历

    请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i、 使用stream().map()提取List对象的某一列值及去重 使用 findAny() 和 findFirst() 获取第一条数据 我是南国以南i记录点滴每天成长一点点,学习是永无止境的!转载请附原文链接!!! 参考链接、参考链接

    2024年04月11日
    浏览(70)
  • Java 一个数组集合List<People> 赋值给另一个数组集合List<NewPeople> ,两个数组集合属性部分一致。

    下面是一个Demo, 具体要根据自己的业务调整。

    2024年01月23日
    浏览(69)
  • 使用java8 新特性stream流对List<Map<String, Object>>集合进行遍历、过滤、查询、去重、排序、分组

    对于一个ListMapString, Object类型的数据,可以使用Java 8的新特性stream流来进行遍历、过滤、查询、去重、排序、分组等操作。 遍历: 过滤: 查询: 去重: 排序: 分组:

    2024年02月10日
    浏览(67)
  • 【Java集合与数组】List<T>数组和数组List<T>的区别(124)

    List数组 :存储List的数组,即:数组中的元素是:List; 数组List :存储数组的List,即:List中的数据是类型的数组; 测试案例: 测试输出:

    2024年02月11日
    浏览(43)
  • 【Java】集合List转换为数组【toArray() /stream()流】实现

    在Java中,集合(List 接口的实现类)提供了一个名为 toArray 的方法,用于将集合中的元素转换成数组。该方法有两个主要的重载形式,分别用于不同的情况。 这个方法将集合中的元素复制到一个指定类型的数组中,并返回该数组。 如果指定的数组大小足够容纳集合中的所有

    2024年02月03日
    浏览(43)
  • java 集合去重、获取、统计重复元素

    开发过程中常遇见的三种问题:集合去重、获取重复元素、统计重复次数。 网上搜了下,实现过程五花八门,这里简单汇总下我觉得比较常用的方式: 方法:List转set;一行代码即可; 前提是不需要获取重复元素和统计重复次数 ,最简单的就是把List转为Set,众所周知,set的

    2024年02月16日
    浏览(53)
  • Java List按照某字段去重

    Java8流的新类java.util.stream.Collectors实现了java.util.stream.Collector接口,同时又提供了大量的方法对流(stream)的元素执行各种统计操作。 执行结果如下 但是这种方式必须要 每个键值对都一样,才会被判定成重复的 ,否则不会被判为重复,如下。 执行结果如下 虽然name的值一样,但

    2024年02月06日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包