欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java合并集合幾種常見方式總結(jié)(List、Set、Map)

 更新時(shí)間:2025年03月19日 10:24:47   作者:頭孢頭孢  
這篇文章主要介紹了Java中合并List、Set、Map的多種方法,包括addAll()、Stream.concat()、Stream.of()+flatMap()、List.copyOf()、putAll()、merge()、compute()和StreamAPI等,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

Java 提供了多種方式來合并集合(List、Set、Map),不同場景下可選擇最合適的方法。以下是常見的合并集合方式的整理:

1. 合并 List

1.1 addAll()

  • 適用場景:直接合并兩個(gè) List
  • 特點(diǎn):修改原集合,無需創(chuàng)建新集合
  • 示例
List<String> list1 = new ArrayList<>(Arrays.asList("A", "B", "C"));
List<String> list2 = Arrays.asList("D", "E");

list1.addAll(list2);
System.out.println(list1); // [A, B, C, D, E]

1.2 Stream.concat()

  • 適用場景:不修改原集合,返回新 List
  • 特點(diǎn):流式操作,適用于不可變集合
  • 示例
List<String> mergedList = Stream.concat(list1.stream(), list2.stream())
                                .collect(Collectors.toList());
System.out.println(mergedList); // [A, B, C, D, E]

1.3 Stream.of() + flatMap()

  • 適用場景:合并多個(gè) List
  • 特點(diǎn):可同時(shí)合并多個(gè) List
  • 示例
List<String> list3 = Arrays.asList("F", "G");

List<String> mergedList = Stream.of(list1, list2, list3)
                                .flatMap(Collection::stream)
                                .collect(Collectors.toList());

System.out.println(mergedList); // [A, B, C, D, E, F, G]

1.4 List.copyOf()

  • 適用場景:創(chuàng)建不可變 List
  • 特點(diǎn):返回 不可變 集合
  • 示例
List<String> mergedList = List.copyOf(Stream.concat(list1.stream(), list2.stream())
                                           .collect(Collectors.toList()));
System.out.println(mergedList); // [A, B, C, D, E]

2. 合并 Set

2.1 addAll()

  • 適用場景:合并 Set(無重復(fù)元素)
  • 示例
Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3));
Set<Integer> set2 = new HashSet<>(Arrays.asList(3, 4, 5));

set1.addAll(set2);
System.out.println(set1); // [1, 2, 3, 4, 5]

2.2 Stream.concat()

  • 適用場景:不修改原集合
  • 示例
Set<Integer> mergedSet = Stream.concat(set1.stream(), set2.stream())
                               .collect(Collectors.toSet());
System.out.println(mergedSet); // [1, 2, 3, 4, 5]

2.3 Stream.of() + flatMap()

  • 適用場景:合并多個(gè) Set
  • 示例
Set<Integer> set3 = new HashSet<>(Arrays.asList(6, 7));

Set<Integer> mergedSet = Stream.of(set1, set2, set3)
                               .flatMap(Set::stream)
                               .collect(Collectors.toSet());

System.out.println(mergedSet); // [1, 2, 3, 4, 5, 6, 7]

3. 合并 Map

3.1 putAll()

  • 適用場景:直接合并 Map
  • 特點(diǎn):如果 key 存在,后者會(huì)覆蓋前者
  • 示例
Map<String, Integer> map1 = new HashMap<>();
map1.put("A", 1);
map1.put("B", 2);

Map<String, Integer> map2 = new HashMap<>();
map2.put("B", 3);
map2.put("C", 4);

map1.putAll(map2);
System.out.println(map1); // {A=1, B=3, C=4}

3.2 merge()

  • 適用場景:合并時(shí)處理重復(fù) key
  • 特點(diǎn):可指定 key 處理方式
  • 示例
map2.forEach((key, value) ->
    map1.merge(key, value, Integer::sum)
);
System.out.println(map1); // {A=1, B=5, C=4}

3.3 compute()

  • 適用場景:動(dòng)態(tài)計(jì)算 key
  • 示例
map2.forEach((key, value) ->
    map1.compute(key, (k, v) -> (v == null) ? value : v + value)
);
System.out.println(map1); // {A=1, B=5, C=4}

3.4 Stream API

  • 適用場景:不修改原 Map,生成新 Map
  • 示例
Map<String, Integer> mergedMap = Stream.of(map1, map2)
    .flatMap(m -> m.entrySet().stream())
    .collect(Collectors.toMap(
        Map.Entry::getKey, 
        Map.Entry::getValue, 
        Integer::sum));

System.out.println(mergedMap); // {A=1, B=5, C=4}

4. 總結(jié)

數(shù)據(jù)結(jié)構(gòu)方法適用場景是否修改原集合
ListaddAll()直接合并?
Stream.concat()不修改原 List?
Stream.of() + flatMap()合并多個(gè) List?
List.copyOf()創(chuàng)建不可變 List?
SetaddAll()直接合并?
Stream.concat()不修改原 Set?
Stream.of() + flatMap()合并多個(gè) Set?
MapputAll()后者覆蓋前者?
merge()合并相同 key?
compute()計(jì)算 key 值?
Stream API不修改原 Map?
  • ? 修改原集合:適用于直接更新已有集合的場景。
  • ? 不修改原集合:適用于函數(shù)式編程、不可變集合的場景。

這幾種方式適用于不同的開發(fā)需求,具體選擇哪種方法取決于業(yè)務(wù)邏輯和性能要求。

到此這篇關(guān)于Java合并集合幾種常見方式總結(jié)(List、Set、Map)的文章就介紹到這了,更多相關(guān)Java合并集合方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 軟件開發(fā)基礎(chǔ)之設(shè)計(jì)模式概述

    軟件開發(fā)基礎(chǔ)之設(shè)計(jì)模式概述

    這篇文章介紹了軟件開發(fā)基礎(chǔ)之設(shè)計(jì)模式,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • 詳解Java中super的幾種用法并與this的區(qū)別

    詳解Java中super的幾種用法并與this的區(qū)別

    這篇文章主要介紹了Java中super的幾種用法并與this的區(qū)別,有需要的朋友可以參考一下
    2013-12-12
  • java 三角形類 Triangle的用法詳解

    java 三角形類 Triangle的用法詳解

    這篇文章主要介紹了java 三角形類 Triangle的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java JSP開發(fā)之Spring中Bean的使用

    java JSP開發(fā)之Spring中Bean的使用

    這篇文章主要介紹了java JSP開發(fā)之Spring中Bean的使用的相關(guān)資料,在Spring中,bean的生命周期就比較復(fù)雜,這里就詳細(xì)介紹下,需要的朋友可以參考下
    2017-08-08
  • Java中的AQS同步隊(duì)列問題詳解

    Java中的AQS同步隊(duì)列問題詳解

    AQS?提供一套基礎(chǔ)的機(jī)制來實(shí)現(xiàn)線程的同步、阻塞與喚醒、等待隊(duì)列等功能,也就是想要深入學(xué)習(xí)線程工具類,這個(gè)同步隊(duì)列就必須得掌握,這篇文章主要介紹了Java中的AQS同步隊(duì)列問題,需要的朋友可以參考下
    2022-06-06
  • Java實(shí)現(xiàn)對(duì)兩個(gè)List快速去重并排序操作示例

    Java實(shí)現(xiàn)對(duì)兩個(gè)List快速去重并排序操作示例

    這篇文章主要介紹了Java實(shí)現(xiàn)對(duì)兩個(gè)List快速去重并排序操作,結(jié)合實(shí)例形式較為詳細(xì)的分析了Java針對(duì)list的遍歷、去重、排序相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • Java實(shí)現(xiàn)單鏈表SingleLinkedList增刪改查及反轉(zhuǎn) 逆序等

    Java實(shí)現(xiàn)單鏈表SingleLinkedList增刪改查及反轉(zhuǎn) 逆序等

    單鏈表是鏈表的其中一種基本結(jié)構(gòu)。一個(gè)最簡單的結(jié)點(diǎn)結(jié)構(gòu)如圖所示,它是構(gòu)成單鏈表的基本結(jié)點(diǎn)結(jié)構(gòu)。在結(jié)點(diǎn)中數(shù)據(jù)域用來存儲(chǔ)數(shù)據(jù)元素,指針域用于指向下一個(gè)具有相同結(jié)構(gòu)的結(jié)點(diǎn)。 因?yàn)橹挥幸粋€(gè)指針結(jié)點(diǎn),稱為單鏈表
    2021-10-10
  • 在spring中使用自定義注解注冊(cè)監(jiān)聽器的方法

    在spring中使用自定義注解注冊(cè)監(jiān)聽器的方法

    本篇文章主要介紹了在spring中使用自定義注解注冊(cè)監(jiān)聽器的方法,本文就是在分析監(jiān)聽器回調(diào)原理的基礎(chǔ)上,在spring環(huán)境中使用自定義的注解實(shí)現(xiàn)一個(gè)監(jiān)聽器。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • Netty啟動(dòng)步驟綁定端口示例方法源碼分析

    Netty啟動(dòng)步驟綁定端口示例方法源碼分析

    這篇文章主要介紹了Netty啟動(dòng)步驟綁定端口源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • idea啟動(dòng)報(bào)錯(cuò):Command line is too long問題

    idea啟動(dòng)報(bào)錯(cuò):Command line is too long問題

    在使用IDEA時(shí),若遇到"Commandlineistoolong"錯(cuò)誤,通常是因?yàn)槊钚虚L度超限,這是因?yàn)镮DEA通過命令行或文件將classpath傳遞至JVM,操作系統(tǒng)對(duì)命令行長度有限制,解決方法是切換至動(dòng)態(tài)類路徑,通過修改項(xiàng)目的workspace.xml文件
    2024-09-09

最新評(píng)論