つまり、2 つ以上のセットがあり、次のいずれかを含む新しいセットを返したい場合です。
- 各セットに共通するすべての要素 (AND)。
- 各セットのすべての要素の合計 (OR)。
- 各セットに固有のすべての要素。(XOR)。
それを行う簡単な既存の方法はありますか?
編集: それは間違った用語ですね。
つまり、2 つ以上のセットがあり、次のいずれかを含む新しいセットを返したい場合です。
それを行う簡単な既存の方法はありますか?
編集: それは間違った用語ですね。
2 Set オブジェクト a と b を仮定
AND(二組の交点)
a.retainAll(b);
OR(二組の和)
a.addAll(b);
XOR または独自のループをロールします。
foreach item
if(a.contains(item) and !b.contains(item) || (!a.contains(item) and b.contains(item)))
c.add(item)
またはこれを行います:
c.addAll(a);
c.addAll(b);
a.retainAll(b); //a now has the intersection of a and b
c.removeAll(a);
セットのドキュメントとこのページを参照してください。多くのための。
Intersection()、union()、およびsymmetricDifference()メソッドを持つGoogle-Collections Setsクラスを使用できます。
Sets.intersection(set1, set2);
Sets.union(set1, set2);
SetView view = Sets.intersection(Sets.union(set1, set2), set3);
Set result = view.copyInto(new HashSet());
@Milhous 氏は次のように述べています。
セットAPIをチェックしてください。addAll を使用すると、または取得できます。keepAll を使用すると、and を取得できます。Xorについては知りません。
s1
セットがあり、s2
これを実行して XOR を取得できる場合のようです。
s1
セットをコピーしますs3
s1.removeAll(s2);
(s1 には、s2 にないすべての要素が含まれるようになりました)s2.removeAll(s3);
(s2 には、s3 にないすべての要素が含まれるようになりました = 古い s1)s1.addAll(s2);
(s1 には、上記の 2 つのセットの和集合が含まれています)セットAPIをチェックしてください。addAll を使用すると、または取得できます。keepAll を使用すると、and を取得できます。Xorについては知りません。
編集:セットのドキュメントから。
...指定されたコレクションもセットである場合、addAll 操作はこのセットを効果的に変更し、その値が 2 つのセットの結合になるようにします。
....指定されたコレクションもセットである場合、この操作はこのセットを効果的に変更し、その値が 2 つのセットの交差になるようにします。
Jakarta Common Collections API がユニオン、交差点などをサポートしていると確信しています。
Google Collections API が同様に機能しなかったとしたら、私は驚くでしょう。