一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java計算集合對稱差的示例代碼

java計算集合對稱差的示例代碼

2020-12-24 13:31xixicat Java教程

本篇文章主要介紹了java計算集合對稱差的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

本文簡單介紹下計算集合對稱差的幾種方法。

maven

?
1
2
3
4
5
6
7
8
9
10
<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>

對稱差

兩個集合的對稱差是只屬于其中一個集合,而不屬于另一個集合的元素組成的集合。

集合A和B的對稱差通常表示為AΔB,對稱差的符號在有些圖論書籍中也使用符號⊕來表示。例如:集合{1,2,3}和{3,4}的對稱差為{1,2,4}。

guava

在guava里頭是用symmetricDifference方法

java" id="highlighter_797786">
?
1
2
3
4
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方法

?
1
2
3
4
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));

改進

上述的兩個方法都不能標注哪些元素屬于第一個集合,哪個屬于第二個集合,有時候我們又想獲取對稱差的時候順便能夠計算出哪個元素屬于哪個集合,這個時候怎么辦呢,可以模仿collection4中的方法來獲取:

?
1
2
3
4
5
6
7
8
9
10
11
12
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);
  }

實例

?
1
2
3
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])

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://segmentfault.com/a/1190000010954970

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧洲vodafonewi精品 | 国产外围 | 国产精品久久久久一区二区三区 | 国产精品欧美亚洲韩国日本 | 涩涩屋视频在线观看 | 色综合天天综合网看在线影院 | 日本韩国推理片免费观看网站 | 亚洲一卡2卡4卡5卡6卡残暴在线 | www.九九| 999精品视频在线观看 | 青春草在线观看视频 | 日日视频 | 韩国三级日本三级香港三级黄 | 99久久99热久久精品免 | 轻轻操在线视频 | 国产福利片在线 易阳 | 日产乱码卡1卡2卡三免费 | 经典三级四虎在线观看 | 日本韩国在线 | 天堂8在线天堂资源在线 | 国模丰满美女冰漪34d | 国语自产拍在线播放不卡 | hd性欧美俱乐部中文 | 图片专区亚洲欧美另类 | videos变态极端 | 热99精品视频 | 欧美一级v片 | japanesepooping脱粪| 午夜性爽视频男人的天堂在线 | 91麻豆精品| 波多野结衣教师未删减版 | 国内精品 大秀视频 日韩精品 | 国产福利不卡 | 91麻豆在线观看 | 国产日韩欧美 | 岛国最新资源网站 | 美女和男生搞基 | 古装全套 毛片 | china精品对白普通话 | 久久日本片精品AAAAA国产 | 99在线观看视频免费 |