List去重的5种方案

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

假设有以下数据:

/**
     * 初始化容器
     * */
    public List<String> initList = Arrays.asList(
            "吕布",
            "马超",
            "马超",
            "夏洛特",
            "夏侯惇",
            "项羽",
            "夏侯惇",
            "马超",
            "吕布",
            "廉颇"
    );

1.for 循环添加去重

 /**
     * for 循环添加去重
     * @author: kaikaiking
     */
    @Test
    public void distinct1() {
        List<String> list = new ArrayList(initList);
        List<String> resultList = new ArrayList<>();
        for (String element : list) {
            if (!resultList.contains(element)) {
                resultList.add(element);
            }
        }
        System.out.println(resultList);
    }

这个是最基本的实现了,创建一个空的 List,添加前判断一下存在不存在,不存在才添加,这样就保证了元素不重复。

2.for 双循环去重

/**
     * for 双循环去重
     * @author: kaikaiking
     */
    @Test
    public void distinct2() {
        List<String> list = new ArrayList(initList);
        for (int i = 0; i < list.size() - 1; i++) {
            for (int j = list.size() - 1; j > i; j--) {
                if (list.get(j).equals(list.get(i))) {
                    list.remove(j);
                }
            }
        }
        System.out.println(list);
    }

利用双循环,判断是否有相等的,再进行移除。

3.for 循环重复坐标去重

/**
     * for 循环重复坐标去重
     * @author: kaikaiking
     */
    @Test
    public void distinct3() {
        List<String> list = new ArrayList(initList);
        List<String> list2 = new ArrayList(initList);
        for (String element : list2) {
            if (list.indexOf(element) != list.lastIndexOf(element)) {
                list.remove(list.lastIndexOf(element));
            }
        }
        System.out.println(list);
    }

复制一个 list2,再循环 List2,判断 list 中的元素的首尾出现的坐标位置是否一致,如果一致,则说明没有重复的,否则重复,再删除重复的位置的元素。

4.Set 去重

 /**
     * Set 去重
     * @author: kaikaiking
     */
    @Test
    public void distinct4() {
        List<String> list = new ArrayList(initList);
        List<String> resultList = new ArrayList(new HashSet(list));
        System.out.println(resultList);
    }

一行代码搞定!

我们知道 Set 是不包含重复元素的,把 List 先装进 HashSet,然后再装回来,这样就保证了元素的不重复。结果虽然正确,但元素顺序和原始 List 不一致,如果要保证顺序性,可以把 HashSet 换成 LinkedHashSet。

 /**
     * Set 去重
     * @author: kaikaiking
     */
    @Test
    public void distinct4() {
        List<String> list = new ArrayList(initList);
        List<String> resultList = new ArrayList(new LinkedHashSet(list));
        System.out.println(resultList);
    }

5.Stream 去重

 /**
     * Stream 去重
     * @author: kaikaiking
     */
    @Test
    public void distinct5() {
        List<String> list = new ArrayList(initList);
        list = list.stream().distinct().collect(Collectors.toList());
        System.out.println(list);
    }

利用 Stream 的 distinct 方法去重,这个方法也十分简单,一行代码搞定!

输出结果:

list去重,笔记,java,Powered by 金山文档

总结

本文总结了 5 种去除 List 重复元素的方法:

  • for 循环添加去重

  • for 双循环去重

  • for 循环重复坐标去重

  • Set 去重

  • Stream 去重

最后两种方案最简单,都是一行代码就能搞定的,推荐使用!文章来源地址https://www.toymoban.com/news/detail-758516.html

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

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

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

相关文章

  • Stream流实践(二):list 对象数组根据某字段去重的三种基本思路

    相信大家对于list简单数组的去重很熟悉了,例如以下代码 那我们来探讨下,对于list中保存为对象的数组,根据内部对象的 某一个字段 去重有什么好的思路呢? 给出一个简单的Student对象 大家学废了吗?

    2024年02月16日
    浏览(84)
  • MySQL中去重 distinct 和 group by 是如何去重的

     测试1:对name 字段进行过滤  测试2:对所有的字段进行去重。   对比测试1和测试2 发现, distinct 可以对 单一字段进行去重 ,当对所有的字段去重时,只有 不同数据的每个字段完全一样的数据被 去掉,其他只有一个字段重复的数据并没有变化,因此得出结论: distinct主要

    2024年02月07日
    浏览(50)
  • hive中Distinct和group by去重的对比

            在Hive中, DISTINCT和GROUP BY都可以用于去重,但是它们背后的实现方式是不同的,因此它们的效率也是不同的。         DISTINCT是一种去重方法,它会扫描整个数据集,然后将重复的记录删除,只留下唯一的记录 。由于DISTINCT需要扫描整个数据集,因此它在处理

    2024年02月04日
    浏览(55)
  • # java合并两个list 并去重,指定保留其中一个list的重复数据

    在Java中,有多种方法可以合并两个List并去重,指定保留其中一个List的重复数据。下面介绍几种常见的方法,并附上代码示例。 该方法首先将一个List的所有元素加入到目标List中,然后遍历另一个List,如果目标List中不包含该元素,则将该元素加入到目标List中。最后得到的就

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

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

    2024年02月06日
    浏览(54)
  • Java8 list多属性去重

    大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 在 Java 开发中,我们经常会面临对 List 中的对象属性去重的需求。然而,当需要根据多个属性来进行去重时,情况会稍微复杂一些。本篇博客将深入探讨如何使用 Java 8 的 Stream API 来实现 List 多属

    2024年02月14日
    浏览(100)
  • Java中list集合stream流去重

    准备类: (1)根据单字段name去重 (2)根据多字段name price去重 (3)示例 输出打印结果

    2024年02月09日
    浏览(55)
  • Java对List<Map>进行合并去重

    对List 进行合并去重,首先创建一个新的 List 用于存储合并去重后的结果,遍历原始的 List ,将每个 Map 对象中的键值对放入一个 Set 中进行去重,最后将去重后的键值对重新组装成一个新的 Map 对象,并添加到新的 List 中。 完整实例代码如下: 简单示例仅供参考

    2024年02月05日
    浏览(73)
  • Java list集合中根据其中两个字段去重

    可以使用Java 8的Stream API和Collectors.toSet()方法来实现根据其中两个字段去重。 首先,使用Stream API将List转换为Stream,然后使用distinct()方法进行去重。distinct()方法默认使用元素的equals()和hashCode()方法进行去重。如果想要根据其中两个字段进行去重,需要重写equals()和hashCode()方法

    2024年02月16日
    浏览(61)
  • java8 List根据元素对象属性去重

    1.使用Collectors.collectingAndThen链式去重 代码: main: 结果: 或者可以利用map也可以: 或: 或者不用链式也可以分开: Collectors.collectingAndThen()  函数应该最像  map and reduce  了, 它可接受两个参数,第一个参数用于  reduce 操作,而第二参数用于  map 操作 。 也就是, 先把流中

    2024年02月12日
    浏览(68)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包