私は2つの配列リストを持っています
ArrayList<String> a1
ArrayList<String> a2
a1 のすべての要素が a2 に存在するかどうかを確認したい。これは、SOに関する質問から得た、私が試していたものです
if (Arrays.asList(a2).containsAll(Arrays.asList(a1)))
{a2ContainsA1=true;}
一貫した結果が得られない...これを行う他の方法はありますか?
私は2つの配列リストを持っています
ArrayList<String> a1
ArrayList<String> a2
a1 のすべての要素が a2 に存在するかどうかを確認したい。これは、SOに関する質問から得た、私が試していたものです
if (Arrays.asList(a2).containsAll(Arrays.asList(a1)))
{a2ContainsA1=true;}
一貫した結果が得られない...これを行う他の方法はありますか?
あなたの質問を正しく理解しているかどうかわかりませんが、なぜ使用しているのArrays.asList()
ですか?
これを試しました:
ArrayList<String> a1 = new ArrayList<String>();
ArrayList<String> a2 = new ArrayList<String>();
a1.add("a");
a1.add("b");
a2.add("b");
a2.add("a");
System.out.println(a2.containsAll(a1));
そしてtrue
、追加の要素を追加すると出力a1
されます(予想どおり):
ArrayList<String> a1 = new ArrayList<String>();
ArrayList<String> a2 = new ArrayList<String>();
a1.add("a");
a1.add("b");
a1.add("c");
a2.add("b");
a2.add("a");
System.out.println(a2.containsAll(a1));
そして、それは出力しますfalse
すでにリストa1
とここがあります。必要なのは、のすべての一意の要素がa2
にあるかどうかを確認することです。したがって、次のことをテストする必要があります。a1
a2
a1.containsAll(a2)
Arrays.asList()
引数として指定したすべての要素からリストを作成します(「すべての要素」が1つの要素のみである場合でも)。実際、現在のコードは、リストオブジェクトを含む単一要素リストに、リストオブジェクトを含む別の単一要素リストのすべての要素が含まれているかどうかを確認しようとしてい a1
ます。そして、これは、リストとが等しい場合、つまり、契約に従って、これらのリストの両方が同じインデックスに同じ要素を含む場合にのみ当てはまります。 a2
a1
a2
List
これは確かにあなたが探していたものではありません!
2 つの ArrayLists を Set オブジェクトに変換し、set 操作を使用して一方が他方のサブセットであるかどうかを判断する方が簡単だと思います。これは、重複に関する@fgeのコメントも満たします。
ArrayList<String> a1 = ...;
ArrayList<String> a2 = ...;
public boolean isSubset(ArrayList<String> a1, ArrayList<String> a2) {
Set<String> s1 = new HashSet(a1);
Set<String> s2 = new HashSet(a2);
return s1.containsAll(s2);
}
配列の1つをループして、その中の各要素に対してcontainsを実行できます
boolean a2ContainsA1 = true;
for(String str: a2){
if(!a1.contains(str)){
a2ContainsA1 = false;
}
試してみてください(a1を保持したくない場合、またはクローンを作成したくない場合)
boolean conditionVerified = a1.removeAll(a2).isEmpty();
boolean contains = true;
for(int i=0 ; i<a1.size() ; i++)
{
if(!a2.contains(a1[i])
contains = false;
}
これはあなたが探しているものですか?
次のようなListUtilsisEqualList()
のメソッドを使用できます-
ArrayList<String> a1 = new ArrayList<String>();
ArrayList<String> a2 = new ArrayList<String>();
boolean isEqual = ListUtils.isEqualList(a1,a2);