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類(lèi)提供了一個(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)文章
整理總結(jié)Java多線(xiàn)程程序編寫(xiě)的要點(diǎn)
這篇文章主要介紹了Java多線(xiàn)程程序編寫(xiě)的要點(diǎn),包括線(xiàn)程的狀態(tài)控制和優(yōu)先級(jí)以及線(xiàn)程的通信問(wèn)題等方面,非常之全面!需要的朋友可以參考下2016-01-01java應(yīng)用占用內(nèi)存過(guò)高排查的解決方案
這篇文章主要介紹了java應(yīng)用占用內(nèi)存過(guò)高排查的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03MyBatis之傳入?yún)?shù)為list、數(shù)組、map的寫(xiě)法
這篇文章主要介紹了MyBatis之傳入?yún)?shù)為list、數(shù)組、map的寫(xiě)法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11一個(gè)處理用戶(hù)登陸的servlet簡(jiǎn)單實(shí)例
這篇文章主要介紹了一個(gè)處理用戶(hù)登陸的servlet簡(jiǎn)單實(shí)例,可通過(guò)servlet實(shí)現(xiàn)處理用戶(hù)登錄的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01使用Java應(yīng)用程序添加或刪除 PDF 中的附件
當(dāng)我們?cè)谥谱鱌DF文件或者PPT演示文稿的時(shí)候,為了讓自己的文件更全面詳細(xì),就會(huì)在文件中添加附件,那么如何添加或刪除PDF中的附件呢,今天通過(guò)本文給大家詳細(xì)講解,需要的朋友參考下吧2023-01-01Java多線(xiàn)程實(shí)戰(zhàn)之交叉打印的兩種方法
今天小編就為大家分享一篇關(guān)于Java多線(xiàn)程實(shí)戰(zhàn)之交叉打印的兩種方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02SpringCloud讓微服務(wù)實(shí)現(xiàn)指定程序調(diào)用
這篇文章主要介紹了SpringCloud讓微服務(wù)實(shí)現(xiàn)指定程序調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06