java計(jì)算集合對稱差的示例代碼
序
本文簡單介紹下計(jì)算集合對稱差的幾種方法。
maven
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>22.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.1</version> </dependency>
對稱差
兩個(gè)集合的對稱差是只屬于其中一個(gè)集合,而不屬于另一個(gè)集合的元素組成的集合。
集合A和B的對稱差通常表示為AΔB,對稱差的符號在有些圖論書籍中也使用符號⊕來表示。例如:集合{1,2,3}和{3,4}的對稱差為{1,2,4}。
guava
在guava里頭是用symmetricDifference方法
Set<Integer> a = new HashSet<>(Arrays.asList(1, 2, 3, 4)); Set<Integer> b = new HashSet<>(Arrays.asList(3, 4, 5, 6)); Sets.SetView<Integer> result = Sets.symmetricDifference(a,b); System.out.println(result);
collection4
在collection4里頭是用disjunction方法
Set<Integer> a = new HashSet<>(Arrays.asList(1, 2, 5)); Set<Integer> b = new HashSet<>(Arrays.asList(1, 2, 3)); SetUtils.SetView<Integer> result = SetUtils.disjunction(a, b); assertTrue(result.toSet().contains(5) && result.toSet().contains(3));
改進(jìn)
上述的兩個(gè)方法都不能標(biāo)注哪些元素屬于第一個(gè)集合,哪個(gè)屬于第二個(gè)集合,有時(shí)候我們又想獲取對稱差的時(shí)候順便能夠計(jì)算出哪個(gè)元素屬于哪個(gè)集合,這個(gè)時(shí)候怎么辦呢,可以模仿collection4中的方法來獲?。?/p>
public static <O> Pair<Collection<O>,Collection<O>> disjunction2(final Collection<? extends O> first, final Collection<? extends O> second, final Predicate<O> p) { final List<O> firstList = first.stream() .filter(e -> p.evaluate(e)) .collect(Collectors.toList()); final List<O> secondList = second.stream() .filter(e -> !firstList.remove(e)) .collect(Collectors.toList()); return Pair.of(firstList,secondList); }
實(shí)例
final List<String> first = Arrays.asList("bbb", "ccc","dddd","aaa"); final List<String> second = Arrays.asList("aaa", "zzz", "ccc"); System.out.println(disjunction(first,second,TruePredicate.truePredicate()));
輸出
([bbb, dddd],[zzz])
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java使用Math.random()結(jié)合蒙特卡洛方法計(jì)算pi值示例
- Java小程序計(jì)算圓周率代碼
- java中計(jì)算集合的交差并集示例代碼
- java中的數(shù)學(xué)計(jì)算函數(shù)的總結(jié)
- java 簡單的計(jì)算器程序?qū)嵗a
- Java計(jì)算球從100米高度自由落下問題
- Java編程計(jì)算兔子生兔子的問題
- java模仿windows計(jì)算器示例
- Java簡易計(jì)算器程序設(shè)計(jì)
- Java計(jì)算幾何圖形面積的實(shí)例代碼
- Java算法之遞歸算法計(jì)算階乘
- Java模擬計(jì)算機(jī)的整數(shù)乘積計(jì)算功能示例
相關(guān)文章
利用Spring JPA中的@Version注解實(shí)現(xiàn)樂觀鎖
樂觀鎖是數(shù)據(jù)庫和應(yīng)用程序中使用的一種并發(fā)控制策略,用于在多個(gè)事務(wù)嘗試更新單個(gè)記錄時(shí)確保數(shù)據(jù)完整性,Java Persistence API (JPA) 提供了一種借助@Version注解在 Java 應(yīng)用程序中實(shí)現(xiàn)樂觀鎖的機(jī)制,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2023-11-11基于Java?利用Mybatis實(shí)現(xiàn)oracle批量插入及分頁查詢
這篇文章主要介紹了基于Java?利用Mybatis實(shí)現(xiàn)oracle批量插入及分頁查詢,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,需要的小伙伴可以參考一下2022-07-07java實(shí)現(xiàn)ssh連接服務(wù)器的方法步驟
本文主要介紹了java實(shí)現(xiàn)ssh連接服務(wù)器的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09超級詳細(xì)Java?JDK環(huán)境配置教程(Mac?版)
這篇文章詳細(xì)講解了在MacOS上安裝JDK及配置Java環(huán)境的步驟,包括下載JDK安裝包、安裝JDK、查詢安裝路徑以及配置環(huán)境變量,旨在為初學(xué)者提供一份保姆級的安裝指南,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-10-10HashMap工作原理_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了HashMap工作原理_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下2017-04-04解決Idea啟動(dòng)Spring Boot很慢的問題
這篇文章主要介紹了解決Idea啟動(dòng)Spring Boot很慢的問題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-12-12Mybatis-Plus中update()和updateById()將字段更新為null
本文主要介紹了Mybatis-Plus中update()和updateById()將字段更新為null,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08Java中null相關(guān)注解的實(shí)現(xiàn)
本文主要介紹了Java中null相關(guān)注解的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04