Java合并兩個(gè)List后并去掉重復(fù)項(xiàng)的兩種做法
前言
工作中很多時(shí)候需要用到合并兩個(gè)List并去除其中的重復(fù)內(nèi)容,這是一個(gè)很簡(jiǎn)單的操作,實(shí)現(xiàn)的方法也多種多樣。
下面以具體實(shí)例展示給大家~
一、使用stream方式進(jìn)行去重(需要jdk1.8及以上)
String[] arr1 = {"a", "b", "c", "d", "e", "f"};
List<String> listA = new ArrayList<>(Arrays.asList(arr1));
String[] arr2 = {"d", "e", "f", "g", "h"};
List<String> listB = new ArrayList<>(Arrays.asList(arr2));
List<String> collect = Stream.of(listA, listB)
.flatMap(Collection::stream)
.distinct()
.collect(Collectors.toList());
可以很清楚的看出通過(guò)Stream完成的代碼看上去更加簡(jiǎn)潔流暢
二、使用HashSet集合的方式進(jìn)行去重
String[] arr1 = {"a", "b", "c", "d", "e", "f"};
List<String> listA = new ArrayList<>(Arrays.asList(arr1));
String[] arr2 = {"d", "e", "f", "g", "h"};
List<String> listB = new ArrayList<>(Arrays.asList(arr2));
Set<String> set = new HashSet<>(listA);
set.addAll(listB);
List<String> list = new ArrayList<>(set);
System.out.println(list);
這樣做后的list就是合并并去重后的結(jié)果
附:利用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() 方法來(lái)實(shí)現(xiàn)。具體實(shí)現(xiàn)步驟如下:
將兩個(gè) list 合并為一個(gè) list;
將合并后的 list 轉(zhuǎn)為 Stream;
使用 Collectors.toMap() 方法將 Stream 中的元素轉(zhuǎn)為 Map;
在 toMap() 方法中指定 key 和 value,對(duì)于重復(fù)的 key,使用 merge() 方法合并 value;
將 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() 方法來(lái)合并兩個(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]
總結(jié)
到此這篇關(guān)于Java合并兩個(gè)List后并去掉重復(fù)項(xiàng)的兩種做法的文章就介紹到這了,更多相關(guān)Java合并List并去掉重復(fù)項(xiàng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot任務(wù)之定時(shí)任務(wù)相關(guān)知識(shí)總結(jié)
今天給大家整理的文章是SpringBoot定時(shí)任務(wù)的相關(guān)知識(shí)點(diǎn),文中有非常詳細(xì)的介紹及代碼示例,對(duì)正在學(xué)習(xí)SpringBoot任務(wù)的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06
MyBatis異常java.sql.SQLSyntaxErrorException的問(wèn)題解決
使用mybatis插入數(shù)據(jù)時(shí)出現(xiàn)java.sql.SQLSyntaxErrorException異常,本文就來(lái)介紹一下MyBatis異常的問(wèn)題解決,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08
SpringBoot配置文件中系統(tǒng)環(huán)境變量存在特殊字符的處理方式
這篇文章主要介紹了SpringBoot配置文件中系統(tǒng)環(huán)境變量存在特殊字符的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Springboot配置AOP的注解切點(diǎn)失效解決方案
本文探討了在Spring框架中使用AOP攔截靜態(tài)方法調(diào)用的實(shí)現(xiàn)細(xì)節(jié),重點(diǎn)在于ApplicationContext和ApplicationContextAware接口的使用差異,通過(guò)對(duì)比兩種獲取Bean的方式,最終解決了切點(diǎn)無(wú)法被攔截的問(wèn)題2026-06-06
Springboot?Filter中注入bean無(wú)效為null問(wèn)題
這篇文章主要介紹了Springboot?Filter中注入bean無(wú)效為null問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java date format時(shí)間格式化操作示例
這篇文章主要介紹了Java date format時(shí)間格式化操作,結(jié)合具體實(shí)例形式分析了java針對(duì)日期時(shí)間進(jìn)行格式化操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-03-03
java 較大數(shù)據(jù)量取差集,list.removeAll性能優(yōu)化詳解
這篇文章主要介紹了java 較大數(shù)據(jù)量取差集,list.removeAll性能優(yōu)化詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
Spring事務(wù)和事務(wù)傳播機(jī)制操作大全
Spring中事務(wù)管理主要分為編程式事務(wù)和聲明式事務(wù),聲明式事務(wù)推薦使用,聲明式事務(wù)通過(guò)`@Transactional`注解實(shí)現(xiàn),可以簡(jiǎn)化事務(wù)操作,本文給大家介紹Spring事務(wù)和事務(wù)傳播機(jī)制,感興趣的朋友跟隨小編一起看看吧2025-12-12

