国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

# java合并兩個(gè)list 并去重,指定保留其中一個(gè)list的重復(fù)數(shù)據(jù)

這篇具有很好參考價(jià)值的文章主要介紹了# java合并兩個(gè)list 并去重,指定保留其中一個(gè)list的重復(fù)數(shù)據(jù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在Java中,有多種方法可以合并兩個(gè)List并去重,指定保留其中一個(gè)List的重復(fù)數(shù)據(jù)。下面介紹幾種常見的方法,并附上代碼示例。

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

該方法首先將一個(gè)List的所有元素加入到目標(biāo)List中,然后遍歷另一個(gè)List,如果目標(biāo)List中不包含該元素,則將該元素加入到目標(biāo)List中。最后得到的就是合并后的List,并去重,但不保留重復(fù)數(shù)據(jù)。

示例代碼:

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);  // 輸出保留重復(fù)數(shù)據(jù)后的List

上述代碼將兩個(gè)List合并后去重,同時(shí)保留了list1中的重復(fù)數(shù)據(jù)。具體實(shí)現(xiàn)過程如下:

  1. 首先將list1中的所有元素加入到mergedList中。
  2. 遍歷list2中的每個(gè)元素,如果mergedList中不包含該元素,則將該元素加入到mergedList中。
  3. 將list1中的所有元素加入到duplicateList中。
  4. 遍歷list2中的每個(gè)元素,如果list1和list2中都包含該元素且duplicateList中不包含該元素,則將該元素加入到duplicateList中。
  5. 最后輸出合并后的List和保留重復(fù)數(shù)據(jù)后的List。

輸出結(jié)果如下:

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

方法二:使用SET去重

首先將兩個(gè)List合并成一個(gè)List,然后利用Set去重,最后再將結(jié)果轉(zhuǎn)換為L(zhǎng)ist。在這個(gè)過程中,我們可以使用一個(gè)Map來記錄需要保留的List中的重復(fù)元素。

示例代碼如下:

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

// 將兩個(gè)List合并
List<Integer> list = new ArrayList<>(list1);
list.addAll(list2);

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

// 用Map記錄需要保留的List中的重復(fù)元素
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);
    }
}

// 將結(jié)果轉(zhuǎn)換為L(zhǎng)ist
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);  // 輸出保留重復(fù)數(shù)據(jù)后的List


輸出結(jié)果如下:

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

方法三:使用Stream去重

當(dāng)我們需要合并兩個(gè)List并去重時(shí),可以使用Java 8的Stream API來實(shí)現(xiàn)。在這個(gè)過程中,我們可以使用distinct()方法來去重,使用collect(Collectors.toList())方法來將結(jié)果收集到List中。在指定保留其中一個(gè)list的重復(fù)數(shù)據(jù)時(shí),我們可以使用retainAll()方法來實(shí)現(xiàn)。

以下是示例代碼:

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) {

        // 創(chuàng)建兩個(gè)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));

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

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

        // 保留其中一個(gè)List的重復(fù)數(shù)據(jù)
        list1.retainAll(list2);

        System.out.println("保留list2中的重復(fù)數(shù)據(jù)后的list1:" + list1);
    }
}

運(yùn)行以上代碼會(huì)輸出以下結(jié)果:

合并并去重后的List:[1, 2, 3, 4, 5, 6, 7]
保留list2中的重復(fù)數(shù)據(jù)后的list1:[3, 4, 5]

在上面的示例代碼中,我們首先創(chuàng)建了兩個(gè)List,然后使用Stream.concat()方法將兩個(gè)List合并,然后使用distinct()方法去重,并使用collect(Collectors.toList())方法將結(jié)果收集到List中。

接著,我們使用retainAll()方法保留其中一個(gè)List的重復(fù)數(shù)據(jù)。這個(gè)方法將修改調(diào)用它的List,使其只包含與指定集合相交的元素,也就是只保留重復(fù)的元素。在這個(gè)例子中,我們將會(huì)保留list2中的重復(fù)數(shù)據(jù),并修改list1來只包含與list2相交的元素。

請(qǐng)注意,在這個(gè)示例代碼中,我們只保留了list1中與list2相交的元素。如果需要保留list2中的重復(fù)數(shù)據(jù),只需要調(diào)用list2.retainAll(list1)即可。

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

Java 8中的Map類提供了一個(gè)merge()方法,可以方便地對(duì)Map中的鍵值對(duì)進(jìn)行合并操作。我們可以先將需要保留的List中的元素轉(zhuǎn)換成一個(gè)Map,然后遍歷另一個(gè)List進(jìn)行合并操作。

示例代碼如下:

使用 Java 8 的 Stream API,結(jié)合 Collectors.toMap() 和 merge() 方法來實(shí)現(xiàn)。具體實(shí)現(xiàn)步驟如下:

  1. 將兩個(gè) list 合并為一個(gè) list;
  2. 將合并后的 list 轉(zhuǎn)為 Stream;
  3. 使用 Collectors.toMap() 方法將 Stream 中的元素轉(zhuǎn)為 Map;
  4. 在 toMap() 方法中指定 key 和 value,對(duì)于重復(fù)的 key,使用 merge() 方法合并 value;
  5. 將 Map 中的 value 轉(zhuǎn)為 list,作為最終的結(jié)果。

下面是代碼示例:

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());
    }
}

該示例中,我們首先定義了兩個(gè) list,然后調(diào)用了 mergeLists() 方法來合并兩個(gè) list 并去重。在該方法中,我們先將兩個(gè) list 合并為一個(gè) list,然后將其轉(zhuǎn)為 Stream。接著使用 Collectors.toMap() 方法將 Stream 中的元素轉(zhuǎn)為 Map,并在 toMap() 方法中指定 key 和 value,對(duì)于重復(fù)的 key,使用 merge() 方法合并 value。最后將 Map 中的 value 轉(zhuǎn)為 list,作為最終的結(jié)果。

輸出結(jié)果如下:

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

歡迎給位大佬前來糾正不足,小弟萬分感謝文章來源地址http://www.zghlxwxcb.cn/news/detail-431796.html

到了這里,關(guān)于# java合并兩個(gè)list 并去重,指定保留其中一個(gè)list的重復(fù)數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java List集合去重、過濾、分組、獲取數(shù)據(jù)、求最值、合并、排序、跳數(shù)據(jù)和遍歷

    請(qǐng)各大網(wǎng)友尊重本人原創(chuàng)知識(shí)分享,謹(jǐn)記本人博客:南國以南i、 使用stream().map()提取List對(duì)象的某一列值及去重 使用 findAny() 和 findFirst() 獲取第一條數(shù)據(jù) 我是南國以南i記錄點(diǎn)滴每天成長(zhǎng)一點(diǎn)點(diǎn),學(xué)習(xí)是永無止境的!轉(zhuǎn)載請(qǐng)附原文鏈接?。?! 參考鏈接、參考鏈接

    2024年04月11日
    瀏覽(89)
  • Java合并兩個(gè)List并去掉重復(fù)項(xiàng)的幾種做法

    一、前言 工作中很多時(shí)候需要用到合并兩個(gè)List并去除其中的重復(fù)內(nèi)容,這是一個(gè)很簡(jiǎn)單的操作,實(shí)現(xiàn)的方法也多種多樣,請(qǐng)繼續(xù)往下看 二、使用stream方式進(jìn)行去重(需要jdk1.8及以上) 可以很清楚的看出通過Stream完成的代碼看上去更加簡(jiǎn)潔流暢? 三、使用HashSet集合的方式進(jìn)行去重

    2024年02月11日
    瀏覽(28)
  • 【Java】Java合并兩個(gè)List后并去掉重復(fù)項(xiàng)的幾種做法

    工作中很多時(shí)候需要用到合并兩個(gè)List并去除其中的重復(fù)內(nèi)容,這是一個(gè)很簡(jiǎn)單的操作,實(shí)現(xiàn)的方法也多種多樣。 下面以具體實(shí)例展示給大家~ 可以很清楚的看出通過Stream完成的代碼看上去更加簡(jiǎn)潔流暢 這樣做后的list就是合并并去重后的結(jié)果

    2024年02月11日
    瀏覽(23)
  • jdk8兩個(gè)List取交集、差集、并集(不去重)、并集(去重)

    jdk8兩個(gè)List取交集、差集、并集(不去重)、并集(去重) demo代碼: 輸出結(jié)果:

    2024年02月15日
    瀏覽(20)
  • golang實(shí)現(xiàn)es根據(jù)某字段分組,統(tǒng)計(jì)每組某一字段的數(shù)量,過濾空值并去重

    需求: 索引:dna 需求:根據(jù)app.Id分組,統(tǒng)計(jì)每組的OwnerBid數(shù)量,過濾空值并去重 dna索引結(jié)構(gòu) es查詢語句 es查詢結(jié)果 goalng實(shí)現(xiàn) models.EsCountAgg 【面向校招】全力備戰(zhàn)2023Golang實(shí)習(xí)與校招 歡迎進(jìn)群交流:1007576722

    2024年02月17日
    瀏覽(24)
  • Stream流 - 兩個(gè)list集合對(duì)象屬性的合并、對(duì)象屬性值運(yùn)算

    Stream流 - 兩個(gè)list集合對(duì)象屬性的合并、對(duì)象屬性值運(yùn)算

    ?? 合并兩個(gè) list<map>, 并將 userId 相同的所有屬性合并到一個(gè) map 中 list1中對(duì)象的屬性:userId、userName list2中對(duì)象的屬性:userId、gender、age ?? 最終總集合中對(duì)象的屬性:userId、userName、gender、age 運(yùn)行結(jié)果: 結(jié)果可見,userId 相同的所有屬性合并到集合 list1中。 ?? 合并兩個(gè)

    2024年02月06日
    瀏覽(307)
  • Java List按照某字段去重

    Java List按照某字段去重

    Java8流的新類java.util.stream.Collectors實(shí)現(xiàn)了java.util.stream.Collector接口,同時(shí)又提供了大量的方法對(duì)流(stream)的元素執(zhí)行各種統(tǒng)計(jì)操作。 執(zhí)行結(jié)果如下 但是這種方式必須要 每個(gè)鍵值對(duì)都一樣,才會(huì)被判定成重復(fù)的 ,否則不會(huì)被判為重復(fù),如下。 執(zhí)行結(jié)果如下 雖然name的值一樣,但

    2024年02月06日
    瀏覽(133)
  • 【Java】List集合去重的方式

    TreeSet可以將字符串類型的數(shù)據(jù)按照字典順序進(jìn)行排序,首字母相同則看第二位 去重前的集合元素:22 去重前的集合元素:11 去重前的集合元素:33 去重前的集合元素:66 去重前的集合元素:22 去重后的集合:[11, 22, 33, 66] 由于Set的特性是無序且不可重復(fù),我們利用這個(gè)特性進(jìn)

    2024年02月04日
    瀏覽(33)
  • Java8 list多屬性去重

    Java8 list多屬性去重

    大家好,我是三叔,很高興這期又和大家見面了,一個(gè)奮斗在互聯(lián)網(wǎng)的打工人。 在 Java 開發(fā)中,我們經(jīng)常會(huì)面臨對(duì) List 中的對(duì)象屬性去重的需求。然而,當(dāng)需要根據(jù)多個(gè)屬性來進(jìn)行去重時(shí),情況會(huì)稍微復(fù)雜一些。本篇博客將深入探討如何使用 Java 8 的 Stream API 來實(shí)現(xiàn) List 多屬

    2024年02月14日
    瀏覽(440)
  • Java中l(wèi)ist集合stream流去重

    準(zhǔn)備類: (1)根據(jù)單字段name去重 (2)根據(jù)多字段name price去重 (3)示例 輸出打印結(jié)果

    2024年02月09日
    瀏覽(81)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包