Java - 2つのリストの差集合、互いにない要素を見つける

2つのArrayListで互いにない要素を見つけるときに、リストの差分集合を計算する方法を紹介します。

1. removeAll() で 2 つのリストの車集合を探す

removeAll(list) は、リストから引数に渡されたリストのすべての要素を削除します。

first と second というリストがあるとき、 first.removeAll(second) を実行すると first にはあるが second にはない要素だけが残ります。 これにより、差分集合を計算できます。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Example {

    public static void main(String[] args) {

        List<Integer> first = Arrays.asList(1, 5, 2, 4, 6, 1);
        List<Integer> second = Arrays.asList(1, 3, 5, 7);

        List<Integer> diff = new ArrayList<>(first);
        diff.removeAll(second);

        System.out.println(diff);
    }
}

Output:

[2, 4, 6]

2. Streamで2つのリストの車集合を探す

以下のように Stream と filter() を利用して 2 つリストの差集合を計算できます。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example1 {

    public static void main(String[] args) {

        List<Integer> first = Arrays.asList(1, 5, 2, 4, 6, 1);
        List<Integer> second = Arrays.asList(1, 3, 5, 7);

        List<Integer> diff = first.stream()
                .filter(i -> !second.contains(i))
                .collect(Collectors.toList());

        System.out.println(diff);
    }
}

Output:

[2, 4, 6]
codechachaCopyright ©2019 codechacha