日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何查找两个列表之间的差异?

發布時間:2025/3/21 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何查找两个列表之间的差异? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 概述

查找相同數據類型的對象集合之間的差異是一項常見的編程任務。舉個例子,假設我們有一份申請考試的學生名單和另一份通過考試的學生名單。這兩張名單的區別會告訴我們那些沒有通過考試的學生。

在Java中,List?API 中沒有顯式的方法來查找兩個列表之間的差異,盡管有一些helper方法非常接近。

在本篇文章中,我們將了解如何找出兩個列表之間的差異。我們將嘗試幾種不同的方法,包括普通的Java(有和沒有Streams),以及使用第三方庫,如Guava和Apache Commons Collections。

2. 測試設置

首先定義兩個列表,我們將用它們來測試示例:

public class FindDifferencesBetweenListsUnitTest {private static final List listOne = Arrays.asList("Jack", "Tom", "Sam", "John", "James", "Jack");private static final List listTwo = Arrays.asList("Jack", "Daniel", "Sam", "Alan", "James", "George");}

3. 使用 Java?List?API

我們可以創建一個列表的副本,然后使用List 的方法removeAll() ,刪除與另一個相同的所有元素:

List<String> differences = new ArrayList<>(listOne); differences.removeAll(listTwo); assertEquals(2, differences.size()); assertThat(differences).containsExactly("Tom", "John");

讓我們把這個顛倒過來,從另一個角度找出差異:

List<String> differences = new ArrayList<>(listTwo); differences.removeAll(listOne); assertEquals(3, differences.size()); assertThat(differences).containsExactly("Daniel", "Alan", "George");

我們還應該注意到,如果我們想找到兩個列表之間的公共元素,List?還有一個?retainal?方法。

4. 使用 Streams API

Java Stream API 可用于對集合中的數據執行順序操作,包括過濾列表之間的差異

List<String> differences = listOne.stream().filter(element -> !listTwo.contains(element)).collect(Collectors.toList()); assertEquals(2, differences.size()); assertThat(differences).containsExactly("Tom", "John");

與第一個示例一樣,我們可以切換列表的順序,以從第二個列表中找到不同的元素:

List<String> differences = listTwo.stream().filter(element -> !listOne.contains(element)).collect(Collectors.toList()); assertEquals(3, differences.size()); assertThat(differences).containsExactly("Daniel", "Alan", "George");

注意?List.contains()?對于較大的列表來說,可能是一項成本高昂的操作。

5. 使用第三方庫

5.1. 使用Google Guava

Guava 包含 Sets.difference 方法, 但要使用它,我們需要先將列表轉換為集合:

List<String> differences = new ArrayList<>(Sets.difference(Sets.newHashSet(listOne), Sets.newHashSet(listTwo))); assertEquals(2, differences.size()); assertThat(differences).containsExactlyInAnyOrder("Tom", "John");

注意,將 列表 轉換為 集合 會產生重復數據消除和重新排序的效果。

5.2. 使用 Apache Commons Collections

Apache Commons Collections中的?CollectionUtils?包含?removeAll?方法.

該方法類似于List.removeAll(),同時也為結果創建一個新的集合:

List<String> differences = new ArrayList<>((CollectionUtils.removeAll(listOne, listTwo))); assertEquals(2, differences.size()); assertThat(differences).containsExactly("Tom", "John");

6. 處理重復值

現在讓我們看看當兩個列表包含重復值時的差異。

為了實現這一點,我們需要從第一個列表中刪除重復的元素,精確到它們包含在第二個列表中的次數

在我們的示例中,“Jack”值在第一個列表中出現兩次,在第二個列表中僅出現一次:

List<String> differences = new ArrayList<>(listOne); listTwo.forEach(differences::remove); assertThat(differences).containsExactly("Tom", "John", "Jack");

我們也可以使用Apache Commons Collections中的subtract方法來實現:

List<String> differences = new ArrayList<>(CollectionUtils.subtract(listOne, listTwo)); assertEquals(3, differences.size()); assertThat(differences).containsExactly("Tom", "John", "Jack");

7. 結論

在本文中,我們探討了幾種查找列表之間差異的方法

在這些示例中,我們介紹了一個基本的Java解決方案,一個使用StreamsAPI的解決方案,以及Google Guava和Apache Commons Collections等第三方庫,以及了解了如何處理重復值。?

總結

以上是生活随笔為你收集整理的如何查找两个列表之间的差异?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产激情久久久 | www.精品视频 | 日本大尺度电影免费观看全集中文版 | 欧美日本黄色 | 哪个网站可以看毛片 | 大尺度做爰床戏呻吟舒畅 | 精品肉丝脚一区二区三区 | 国产精品国色综合久久 | 亚洲国产色图 | 久久αv| 亚洲一区二区在线播放 | 欧美影视一区二区 | 好吊日在线观看 | 西西人体做爰大胆gogo直播 | 国产黄免费 | 国产主播一区二区 | 免费成人av| 国产裸体无遮挡 | 精品国产一区二区三区无码 | 免费在线观看黄色网址 | 国产乱码精品一品二品 | av网站在线观看免费 | 国产黄视频在线观看 | 超碰在线综合 | 国产精品麻豆一区二区三区 | 国产又爽又黄的激情精品视频 | 国产伦精品免费视频 | 国产中文字幕在线播放 | 男人天堂999 | av色在线 | 国产色视频一区二区三区qq号 | 琪琪成人 | 欧美成人性生活 | 911香蕉 | 亚洲成人乱码 | 亚洲红桃视频 | 婷婷看片 | 欧美日韩国产在线一区 | 国产精品一区二区白浆 | 91亚洲欧美激情 | 欧美大奶在线 | 久久久精品久久久久 | 超碰一区二区三区 | 91亚洲精品国偷拍自产在线观看 | 欧美又黑又粗 | 成人久久18免费网站图片 | 91视频免费视频 | 国产人妖一区二区 | 成人啪啪18免费游戏链接 | 色妞av | 亚洲精品3| 吞精囗交69激情欧美 | av桃色| 成人av网站在线播放 | 亚洲欧美日韩一区二区三区四区 | 欧美在线视频一区二区 | 三上悠亚一区二区三区 | av鲁丝一区鲁丝二区鲁丝 | 国产视频不卡 | 91精品免费在线观看 | 日韩伊人久久 | 成人网在线 | av电影网站在线观看 | av免费影院| 国产在线黄 | 毛片毛片毛片毛片毛片毛片毛片毛片 | 亚洲欧美一区二区三区久久 | 黄片毛片av | 成人在线视频网址 | 国产精品高潮呻吟久久久久久 | 久久99精品国产91久久来源 | 两个小y头稚嫩紧窄h文 | 成人一区二区视频 | 96日本xxxxxⅹxxx17 | 亚洲欧美精品 | 91精品人妻一区二区三区果冻 | 亚洲精品免费视频 | 伊人影院中文字幕 | 午夜精品久久99蜜桃的功能介绍 | 欧美日韩一区二区三区不卡视频 | 国产第100页 | 青青草国内自拍 | 国产视色| 黑人干亚洲人 | 亚洲自拍偷拍网 | 欧美亚洲综合久久 | 涩涩国产| 国产jizz| 一级做a爱片久久毛片 | 中国一级片在线观看 | 国产一区二区视频播放 | 国内黄色一级片 | 熟女高潮一区二区三区视频 | 中文字幕35页 | 成人免费无码大片a毛片抽搐色欲 | 欧美大黄 | 国产高清不卡 | 美女福利视频网 | 五十路六十路七十路熟婆 |