2 つの文字列配列があるとします。
String[] first = new String[]{"12","23","44","67"};
String[] second= new String[]{"12","22","46","67"};
PHP のarray_diffのような関数を検索すると、次のようにこれら 2 つの配列の違いが得られます。
{"23","44"}
この操作には組み込み関数がありますか、それとも for ループを作成して違いを確認する必要がありますか?
2 つの文字列配列があるとします。
String[] first = new String[]{"12","23","44","67"};
String[] second= new String[]{"12","22","46","67"};
PHP のarray_diffのような関数を検索すると、次のようにこれら 2 つの配列の違いが得られます。
{"23","44"}
この操作には組み込み関数がありますか、それとも for ループを作成して違いを確認する必要がありますか?
次のように、これらの配列から 2 つの Set を作成できます。
List<String> firstList = Arrays.asList(first);
List<String> secondList = Arrays.asList(second);
Set<String> firstSet = new HashSet<String>(first);
Set<String> secondSet = new HashSet<String>(second);
次に、removeAllメソッドを使用します。
firstSet.removeAll(secondList);
secondSet.removeAll(firstList);
そのためfirstList、最初の配列でのみ使用可能なすべての要素とsecondList、2 番目の配列で使用可能な要素のみが含まれるようになりました。
いずれかのセットで使用可能な要素のみを含むセット (両方のセットで使用可能な要素を含まない) は、次を使用して作成できます。
new HashSet<String>(firstSet).addAll(secondSet);
Guava のSetsクラスには差分メソッドがあります。
それで
Set<String> diff = Sets.difference(newHashSet(first), newHashSet(second));
PHP 配列はまったく配列ではありません。そのため、diff にこのような奇妙なメソッドが存在します。
数学的な意味で 2 つのセット (A - B) の差が必要な場合は、
1) セットを使用する
Set<Integer> set1 = new HashSet<Integer>();
Set<Integer> set2 = new HashSet<Integer>();
2) 差分メソッドを使用する (set2 にはない set1 のすべての要素を含む)
set1.removeAll(set2)
これは非対称差であることに注意してください。