回答:
うまくいきませんCollections.disjoint(A, B)
か?ドキュメントから:
true
指定された2つのコレクションに共通の要素がない場合に返します。
したがって、false
コレクションに共通の要素が含まれている場合、メソッドは戻ります。
anyMatch
すべての要素をストリーミングし、それらすべてをsetA
呼び出しsetB.contains()
ます。いずれかの要素に対して「true」が返された場合、式は全体としてtrueと評価されます。これがお役に立てば幸いです。
セットにcontainsAnyを実装する良い方法は、Guava Sets.intersection()を使用することです。
containsAny
はを返すboolean
ため、呼び出しは次のようになります。
Sets.intersection(set1, set2).isEmpty()
セットがばらばらであればtrueを返し、そうでなければfalseを返します。元のセットを変更しないようにするためにクローンを作成する必要がないため、この時間の複雑さはおそらくretainAllよりもわずかに優れています。
Apache CommonsにはメソッドがありCollectionUtils.containsAny()
ます。
retainAll()
Setインターフェースで使用します。このメソッドは、両方のセットに共通する要素の共通部分を提供します。詳細については、APIドキュメントを参照してください。
retainAll
おそらく役に立たないでしょう。AbstractCollection
反復でのその実装。
O(1)
、最良の場合には実行時間retainAll
を持ちますが、ラインに沿って何かを持ちますO(N)
(1つのセットのサイズに依存します)。最高の実行時間。
それを行うには少し大雑把な方法があります。Aセットに呼び出しよりもBの要素が含まれている場合に限り
A.removeAll(B)
Aセットを変更します。この状況では、removeAllはtrueを返します(removeAll docsで述べたとおり)。しかし、おそらくAセットを変更したくないので、次のようにコピーを操作することを考えます。
new HashSet(A).removeAll(B)
また、セットが明確でない場合、つまり空でない交差がある場合、戻り値はtrueになります。
Apache Commons Collectionも参照してください