簡體   English   中英

集合addAll removeAll返回布爾值

[英]Collection addAll removeAll returns boolean

C是Set<T>類型的Set<T> ,F(x)返回Set的集合,我想要做的是在集合之間執行操作,如union,intersection,difference

// C union ( F(X) \ F(Y))
C.addAll( F(X).removeAll( F(Y)))); //error boolean because removeAll returns a boolean

替代方案我可以

C_aux = new HashSet<T> ( F(X));
C_aux.removeAll( F(Y)); 
C.addAll( C_aux);

無論如何要做到這一點而不宣布輔助集合? (跳過/忽略布爾返回)

java.util.Collection API:

a.retainAll(b); // intersection
a.removeAll(b); // difference
a.addAll(b); // union

Google Guava com.google.common.collect.Sets API:

Sets.union(a, b);
Sets.intersection(a, b);
Sets.difference(a, b);

如果你真正需要的話,你可以寫一行代碼:

Sets.union(C, Sets.difference(F(X), F(Y)))

但請記住,結果集是只讀的,因此如果您需要真正的Set,請使用C.removeAll

怎么樣

C.addAll(A.removeAll(B)?A:A);

通常我會認為這是一個笑話,但在這種情況下,您可以保存創建列表。 在忘記澆水約3個月后,它仍然像我的“裝飾”植物一樣難看......:P

編輯:這當然也有效,但仍然會改變A.

A.removeAll(B);
C.addAll(A);

順便說一句:如果AB不能在方法中更改,我認為無法創建臨時列表(無論您是否在變量中保護它)。 至少如果C最初可以包含元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM