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中的方法來獲取:
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-07
java實(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-10
HashMap工作原理_動(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-12
Mybatis-Plus中update()和updateById()將字段更新為null
本文主要介紹了Mybatis-Plus中update()和updateById()將字段更新為null,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Java中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

