# java合并两个list 并去重,指定保留其中一个list的重复数据

这篇具有很好参考价值的文章主要介绍了# java合并两个list 并去重,指定保留其中一个list的重复数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Java中,有多种方法可以合并两个List并去重,指定保留其中一个List的重复数据。下面介绍几种常见的方法,并附上代码示例。

方法一:使用addAll()方法和contains()方法

该方法首先将一个List的所有元素加入到目标List中,然后遍历另一个List,如果目标List中不包含该元素,则将该元素加入到目标List中。最后得到的就是合并后的List,并去重,但不保留重复数据。

示例代码:

List<String> list1 = Arrays.asList("A", "B", "C", "D", "E");
List<String> list2 = Arrays.asList("C", "D", "E", "F", "G");

List<String> mergedList = new ArrayList<>();
mergedList.addAll(list1);  // 将list1的元素加入到mergedList中

for (String str : list2) {
    if (!mergedList.contains(str)) {
        mergedList.add(str);  // 如果mergedList中不包含该元素,则将该元素加入到mergedList中
    }
}

List<String> duplicateList = new ArrayList<>();
duplicateList.addAll(list1);  // 将list1的元素加入到duplicateList中

for (String str : list2) {
    if (list1.contains(str) && !duplicateList.contains(str)) {
        duplicateList.add(str);  // 如果list1和list2中都包含该元素且duplicateList中不包含该元素,则将该元素加入到duplicateList中
    }
}

System.out.println("Merged List: " + mergedList);  // 输出合并后的List
System.out.println("Duplicate List: " + duplicateList);  // 输出保留重复数据后的List

上述代码将两个List合并后去重,同时保留了list1中的重复数据。具体实现过程如下:

  1. 首先将list1中的所有元素加入到mergedList中。
  2. 遍历list2中的每个元素,如果mergedList中不包含该元素,则将该元素加入到mergedList中。
  3. 将list1中的所有元素加入到duplicateList中。
  4. 遍历list2中的每个元素,如果list1和list2中都包含该元素且duplicateList中不包含该元素,则将该元素加入到duplicateList中。
  5. 最后输出合并后的List和保留重复数据后的List。

输出结果如下:

Merged List: [A, B, C, D, E, F, G]
Duplicate List: [A, B, C, D, E]

方法二:使用SET去重

首先将两个List合并成一个List,然后利用Set去重,最后再将结果转换为List。在这个过程中,我们可以使用一个Map来记录需要保留的List中的重复元素。

示例代码如下:

List<Integer> list1 = Arrays.asList(1, 2, 3, 3, 4);
List<Integer> list2 = Arrays.asList(2, 3, 5);

// 将两个List合并
List<Integer> list = new ArrayList<>(list1);
list.addAll(list2);

// 使用Set去重
Set<Integer> set = new HashSet<>(list);

// 用Map记录需要保留的List中的重复元素
Map<Integer, Integer> map = new HashMap<>();
for (Integer num : list1) {
    if (set.contains(num)) {
        if (!map.containsKey(num)) {
            map.put(num, 1);
        } else {
            map.put(num, map.get(num) + 1);
        }
        set.remove(num);
    }
}

// 将结果转换为List
List<Integer> result = new ArrayList<>(set);
for (Integer num : map.keySet()) {
    for (int i = 0; i < map.get(num); i++) {
        result.add(num);
    }
}

System.out.println("Merged List: " + list);  // 输出合并后的List
System.out.println("Duplicate List: " + result);  // 输出保留重复数据后的List


输出结果如下:

Merged List: [1, 2, 3, 3, 4, 2, 3, 5]
Duplicate List: [5, 1, 2, 3, 4]

方法三:使用Stream去重

当我们需要合并两个List并去重时,可以使用Java 8的Stream API来实现。在这个过程中,我们可以使用distinct()方法来去重,使用collect(Collectors.toList())方法来将结果收集到List中。在指定保留其中一个list的重复数据时,我们可以使用retainAll()方法来实现。

以下是示例代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class MergeAndDistinctListExample {

    public static void main(String[] args) {

        // 创建两个List
        List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
        List<Integer> list2 = new ArrayList<>(Arrays.asList(3, 4, 5, 6, 7));

        // 合并两个List并去重
        List<Integer> result = Stream.concat(list1.stream(), list2.stream())
                .distinct()
                .collect(Collectors.toList());

        System.out.println("合并并去重后的List:" + result);

        // 保留其中一个List的重复数据
        list1.retainAll(list2);

        System.out.println("保留list2中的重复数据后的list1:" + list1);
    }
}

运行以上代码会输出以下结果:

合并并去重后的List:[1, 2, 3, 4, 5, 6, 7]
保留list2中的重复数据后的list1:[3, 4, 5]

在上面的示例代码中,我们首先创建了两个List,然后使用Stream.concat()方法将两个List合并,然后使用distinct()方法去重,并使用collect(Collectors.toList())方法将结果收集到List中。

接着,我们使用retainAll()方法保留其中一个List的重复数据。这个方法将修改调用它的List,使其只包含与指定集合相交的元素,也就是只保留重复的元素。在这个例子中,我们将会保留list2中的重复数据,并修改list1来只包含与list2相交的元素。

请注意,在这个示例代码中,我们只保留了list1中与list2相交的元素。如果需要保留list2中的重复数据,只需要调用list2.retainAll(list1)即可。

方法四:利用Java 8的Map.merge()方法

Java 8中的Map类提供了一个merge()方法,可以方便地对Map中的键值对进行合并操作。我们可以先将需要保留的List中的元素转换成一个Map,然后遍历另一个List进行合并操作。

示例代码如下:

使用 Java 8 的 Stream API,结合 Collectors.toMap() 和 merge() 方法来实现。具体实现步骤如下:

  1. 将两个 list 合并为一个 list;
  2. 将合并后的 list 转为 Stream;
  3. 使用 Collectors.toMap() 方法将 Stream 中的元素转为 Map;
  4. 在 toMap() 方法中指定 key 和 value,对于重复的 key,使用 merge() 方法合并 value;
  5. 将 Map 中的 value 转为 list,作为最终的结果。

下面是代码示例:

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class MergeListExample {

    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();
        list1.add("A");
        list1.add("B");
        list1.add("C");
        list1.add("D");

        List<String> list2 = new ArrayList<>();
        list2.add("C");
        list2.add("D");
        list2.add("E");
        list2.add("F");

        List<String> mergedList = mergeLists(list1, list2);

        System.out.println("Merged list with duplicates: " + mergedList);

        List<String> distinctList = mergedList.stream().distinct().collect(Collectors.toList());

        System.out.println("Distinct merged list: " + distinctList);
    }

    private static List<String> mergeLists(List<String> list1, List<String> list2) {
        List<String> mergedList = new ArrayList<>(list1);
        mergedList.addAll(list2);
        Map<String, String> map = mergedList.stream()
                .collect(Collectors.toMap(s -> s, s -> s, (s1, s2) -> s1));
        return new ArrayList<>(map.values());
    }
}

该示例中,我们首先定义了两个 list,然后调用了 mergeLists() 方法来合并两个 list 并去重。在该方法中,我们先将两个 list 合并为一个 list,然后将其转为 Stream。接着使用 Collectors.toMap() 方法将 Stream 中的元素转为 Map,并在 toMap() 方法中指定 key 和 value,对于重复的 key,使用 merge() 方法合并 value。最后将 Map 中的 value 转为 list,作为最终的结果。

输出结果如下:

Merged list with duplicates: [A, B, C, D, C, D, E, F]
Distinct merged list: [A, B, C, D, E, F]

欢迎给位大佬前来纠正不足,小弟万分感谢文章来源地址https://www.toymoban.com/news/detail-431796.html

到了这里,关于# java合并两个list 并去重,指定保留其中一个list的重复数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Java List集合去重、过滤、分组、获取数据、求最值、合并、排序、跳数据和遍历

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

    2024年04月11日
    浏览(70)
  • Java合并两个List并去掉重复项的几种做法

    一、前言 工作中很多时候需要用到合并两个List并去除其中的重复内容,这是一个很简单的操作,实现的方法也多种多样,请继续往下看 二、使用stream方式进行去重(需要jdk1.8及以上) 可以很清楚的看出通过Stream完成的代码看上去更加简洁流畅  三、使用HashSet集合的方式进行去重

    2024年02月11日
    浏览(58)
  • 【Java】Java合并两个List后并去掉重复项的几种做法

    工作中很多时候需要用到合并两个List并去除其中的重复内容,这是一个很简单的操作,实现的方法也多种多样。 下面以具体实例展示给大家~ 可以很清楚的看出通过Stream完成的代码看上去更加简洁流畅 这样做后的list就是合并并去重后的结果

    2024年02月11日
    浏览(56)
  • jdk8两个List取交集、差集、并集(不去重)、并集(去重)

    jdk8两个List取交集、差集、并集(不去重)、并集(去重) demo代码: 输出结果:

    2024年02月15日
    浏览(226)
  • golang实现es根据某字段分组,统计每组某一字段的数量,过滤空值并去重

    需求: 索引:dna 需求:根据app.Id分组,统计每组的OwnerBid数量,过滤空值并去重 dna索引结构 es查询语句 es查询结果 goalng实现 models.EsCountAgg 【面向校招】全力备战2023Golang实习与校招 欢迎进群交流:1007576722

    2024年02月17日
    浏览(48)
  • Stream流 - 两个list集合对象属性的合并、对象属性值运算

    📅 合并两个 list<map>, 并将 userId 相同的所有属性合并到一个 map 中 list1中对象的属性:userId、userName list2中对象的属性:userId、gender、age 📌 最终总集合中对象的属性:userId、userName、gender、age 运行结果: 结果可见,userId 相同的所有属性合并到集合 list1中。 📅 合并两个

    2024年02月06日
    浏览(132)
  • 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日
    浏览(101)
  • Java中list集合stream流去重

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

    2024年02月09日
    浏览(55)
  • 【Java】List集合去重的方式

    TreeSet可以将字符串类型的数据按照字典顺序进行排序,首字母相同则看第二位 去重前的集合元素:22 去重前的集合元素:11 去重前的集合元素:33 去重前的集合元素:66 去重前的集合元素:22 去重后的集合:[11, 22, 33, 66] 由于Set的特性是无序且不可重复,我们利用这个特性进

    2024年02月04日
    浏览(66)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包