[Java] Set 차집합 구하는 방법 2가지 ( removeAll / Stream )

2023-01-30



1. 방법

 

아래의 방법은 기존 set에서 비교하고자 하는 set을 빼는 방법이다. 코드는 간단하지만 원본객체가 보존이 되지 않는 문제점이 있다.

 

    @Test
    public void SetTest1(){
        Set<String> allNameSet =new HashSet<>();
        allNameSet.add("a");
        allNameSet.add("b");
        allNameSet.add("c");
        allNameSet.add("d");
        allNameSet.add("e");
        Set<String> NameSet =new HashSet<>();
        NameSet.add("a");
        NameSet.add("b");
        NameSet.add("c");

        allNameSet.removeAll(NameSet);
        for(String name : allNameSet){
            System.out.println(name);
        }
    }

반면에 아래코드는 조금 더 복잡하지만 원본객체의 손상 없이 stream을 활용해 제외하고자 하는 set 정보만 제외시켜 새로운 set 객체어 담을 수 있다.

 

    @Test
    public void SetTest2(){
        Set<String> allNameSet =new HashSet<>();
        allNameSet.add("a");
        allNameSet.add("b");
        allNameSet.add("c");
        allNameSet.add("d");
        allNameSet.add("e");
        Set<String> NameSet =new HashSet<>();
        NameSet.add("a");
        NameSet.add("b");
        NameSet.add("c");

        Set<String> NewNameSet =new HashSet<>();
        NewNameSet = allNameSet.stream()
                .filter(name -> !NameSet.contains(name))
                .collect(Collectors.toSet());
        for(String name : NewNameSet){
            System.out.println(name);
        }
    }

메인 이미지 출처 : 사진: Unsplashredcharlie | @redcharlie1