java - 配列 - list<map<string, object>>




Javaのセットに「any contains」のようなものがありますか? (6)

Apache Commonsには、 CollectionUtils.containsAny()メソッドがあります。

私は同じタイプの2つのセットAとBを持っています。

AにセットBの要素が含まれているかどうかを調べる必要があります。

セットを反復することなくそれを行う最善の方法は何でしょうか? Setライブラリにはcontains(object)containsAll(collection)containsAny(collection)containsAny(collection)が、 containsAny(collection)containsAny(collection)いません。


Java 8以降: setA.stream().anyMatch(setB::contains)


containsAnyをセットに実装する良い方法は、Guava Sets.intersection()を使用することです。

containsAnybooleanを返すので、呼び出しは次のようになります。

Sets.intersection(set1, set2).isEmpty()

セットが互いに素である場合はtrueを返し、そうでない場合はfalseを返します。 この時間の複雑さは、元のセットを変更しないようにクローンを行う必要がないので、retainAllよりも若干優れています。


Collections.disjoint(A, B)動作しませんか? ドキュメントから:

指定された2つのコレクションに共通の要素がない場合はtrue返します。

したがって、コレクションに共通の要素が含まれている場合、このメソッドはfalse返します。


それを行うには少し粗い方法があります。 AセットにコールよりもBの要素が含まれている場合のみ

A.removeAll(B)

Aセットを修正します。 この状況では、removeAllはtrueを返します( removeAll docsで述べたように)。 しかし、たぶんあなたはAセットを変更したくないので、あなたはこのようにコピーに対して行動すると考えるかもしれません:

new HashSet(A).removeAll(B)

セットが区別されない場合、つまり空ではない交差がある場合は戻り値はtrueになります。

Apache Commons Collectionsも参照してください。


私はorg.apache.commons.collections.CollectionUtilsを使用します

CollectionUtils.containsAny(someCollection1, someCollection2)

それはすべてです! 少なくとも1つの要素が両方のコレクションにある場合はtrueを返します。

使い方が簡単で、関数の名前が示唆的です。





java