2番目の配列リストに表示されていない要素を見つけるための最良の方法を見つけなければなりません。仮定する
Arraylist a,b,
Arraylist a={1,2,3,4,5};
Arraylist b={2,3,4};
したがって、基本的に私が望むのは、 arraylist bに存在しないa の要素を見つけることです。
それで、それを行うための最良の解決策は何ですか?
2番目の配列リストに表示されていない要素を見つけるための最良の方法を見つけなければなりません。仮定する
Arraylist a,b,
Arraylist a={1,2,3,4,5};
Arraylist b={2,3,4};
したがって、基本的に私が望むのは、 arraylist bに存在しないa の要素を見つけることです。
それで、それを行うための最良の解決策は何ですか?
List<Integer> c = new ArrayList<>(a);
c.removeAll(b);
リストの代わりにセットを使用することも検討してください。
この目的のために明示的にメソッドを持つApache Commons Collectionsを使用できます。
public static void main(String[] args) {
List<Integer> a = Arrays.asList(new Integer[] { 1, 2, 3, 4, 5 });
List<Integer> b = Arrays.asList(new Integer[] { 2, 3, 4 });
Collection<Integer> aMinusB = CollectionUtils.subtract(a, b);
System.out.println(aMinusB);
}
出力結果は[1, 5]です。
Apache Commons ライブラリは十分にテストされており、標準の Java 機能を拡張するために一般的に使用されています。この特定のメソッドはパラメーターとして受け入れるIterable
ため、必要に応じて使用できCollection
ます。異なるコレクション タイプを混在させることもできます。
public static void main(String[] args) {
List<Integer> a = Arrays.asList(new Integer[] { 1, 2, 3, 4, 5 });
Set<Integer> b = new HashSet<Integer>(Arrays.asList(new Integer[] { 2, 3, 4 }));
Collection<Integer> aMinusB = CollectionUtils.subtract(a, b);
System.out.println(aMinusB);
}
出力結果は同じ[1, 5]です。
ここでJavadocをチェックしてください。
完全を期すために、Google のGuavaライブラリにはこの機能がありません:
Collection *subtract*(Collection, Collection)
同等のものはありません。a を含む ArrayList を作成し、b の各要素に対して remove を呼び出します。
ただし、メソッドと呼ばれるSets.difference()
メソッドを実装しています。これは、グアバを好み、セットを操作する場合に使用できます。
public static void main(String[] args) {
Set<Integer> a = new HashSet<Integer>(Arrays.asList(new Integer[] { 1, 2, 3, 4, 5 }));
Set<Integer> b = new HashSet<Integer>(Arrays.asList(new Integer[] { 2, 3, 4 }));
Set<Integer> aMinusB = Sets.difference(a, b);
System.out.println(aMinusB);
}
a
結果は、に存在しないすべての要素になりますb
(つまり[1, 5]再び)。もちろん、セットで動作するため、順序は決まっていません。
あなたが試すことができますremoveAll
:
List<Integer> notPresent = new ArrayList<Integer>(a);
notPresent.removeAll(b);
使用するorg.apache.commons.collections4.ListUtils
与えられた
List<Integer> a = Arrays.asList(new Integer[]{ 1,2,3,4,5});
List<Integer> b = Arrays.asList(new Integer[]{0,1,2,3});
アクション
List<Integer> c = ListUtils.removeAll(b, a)
リスト c の結果
4, 5
このようにしてみてください
for (Object o : a) {
if (!b.contains(o)) {
// this is not present
}
}
これを試して:
public static void main(String[] args) {
List<Integer> a = new ArrayList<Integer>();
List<Integer> b = new ArrayList<Integer>();
List<Integer> exclusion = new ArrayList<Integer>();
a.add(1);
a.add(2);
a.add(3);
a.add(4);
b.add(1);
b.add(2);
b.add(3);
b.add(5);
for (Integer x : a) {
if (!b.contains(x)) {
exclusion.add(x);
}
}
for (Integer x : exclusion) {
System.out.println(x);
}
}
1 つのリストをループしてから、を使用して他のリストの各要素が含まれているかどうかを確認します。
このようなもの。に重複があると思われる場合は、 forなどのa
別のタイプの を試すことができます。Collection
Set
notPresent
List<Integer> notPresent = new ArrayList<Integer>();
for (Integer n : a){
if (!b.contains(n)){
notPresent.add(n);
}
}
これを試して...
contains()
Listの方法を使用します。
ArrayList<Integer> aList = new ArrayList<Integer>();
for (Integer i : a){
if (!(b.contains(i))){
aList.add(i);
}
else{
continue;
}
}