Java - 두개 리스트의 차집합, 서로 없는 요소 찾기

두개의 ArrayList에서 서로 없는 요소를 찾을 때, 리스트들의 차집합을 계산하는 방법을 소개합니다.

1. removeAll()으로 두개 리스트의 차집합 찾기

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으로 두개 리스트의 차집합 찾기

아래와 같이 Stream과 filter()를 이용하여 두개 리스트의 차집합을 계산할 수 있습니다.

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]
Loading script...
codechachaCopyright ©2019 codechacha