次の問題の解決策を見つけようとしています。データベースから値を取得する 4 つの異なる ArrayList があります。サイズは 0 (含む) から任意の値までです。各リストのサイズと値も異なる場合があります。私が効果的にやろうとしているのは、次のとおりです。0以外のすべてのサイズリストを比較し、それらに共通の整数があるかどうか、およびそれらの値が何であるかを確認します。
何か案は?ありがとうございました!
空の整数を除いて、すべてに共通の整数のコレクションが必要な場合:
List<List<Integer>> lists = ...
Collection<Integer> common = new HashSet<Integer>(lists.get(0));
for (int i = 1; i < lists.size(); i++) {
if (!lists.get(i).isEmpty())
common.retainAll(lists.get(i));
}
最後に、common
それらすべてに共通の整数が含まれます。
ArrayList オブジェクトで集合交差操作を使用できます。
このようなもの:
List<Integer> l1 = new ArrayList<Integer>();
l1.add(1);
l1.add(2);
l1.add(3);
List<Integer> l2= new ArrayList<Integer>();
l2.add(4);
l2.add(2);
l2.add(3);
List<Integer> l3 = new ArrayList<Integer>(l2);
l3.retainAll(l1);
ここで、l3 は l1 と l2 の間で共通の要素のみを持つ必要があります。
Apache Commons を使用して 2 つのコレクションの共通部分を取得したい場合がありますCollectionUtils.intersection()
...
交差を繰り返し生成し、完了時に空でない場合は、共通の要素があり、この結果のコレクションにあります。
空のリストについて: 0 かどうかを確認し、size()
0 の場合はこのリストをスキップします。