그 외 ... (정리해야함)/꿀팁

[JAVA] Stream을 이용한 이중 for문

깡냉쓰 2019. 8. 5. 23:08
728x90
반응형

Stream을 이용한 2중 for문

우리는 2중 for문을 종종 사용해야할 때가 있다.
Stream을 이용하여 2중 for문을 구현해보자.

상황

public static void main(String[] args) {
    List<String> list1 = Arrays.asList("a", "b", "c", "d", "e");
    List<String> list2 = Arrays.asList("a", "b", "d");
    // 2중 for문은 stream으로 어떻게 작성할까?
    // 만약 for문을 돌면서 같은 것만 list에 담고 싶다면?

    // 8버전 이전
    List<String> result1 = new ArrayList<>();
    for(String str1 : list1){
        for(String str2 : list2){
            if(str1.equals(str2)){
                result1.add(str1);
            }
        }
    }
    for(String str : result1){
        System.out.print(str);
    }

    System.out.println();

    // 8버전 (stream 이용)
    List<String> result2 =
    list1.stream()
        .filter(str -> list2.stream().anyMatch(Predicate.isEqual(str)))
        .collect(Collectors.toList());

    result2.stream().forEach(System.out::print);
}

filter 메소드를 사용하여 중간처리를 한다.
stream의 xxxMatch메소드를 이용하여 매칭되는 element를 찾는다.

  • noneMatch => 불일치 데이터 필터링
  • anyMatch => 일치 데이터 필터링
  • allMatch => 모두 일치하는 데이터 필터링

세 가지 Match가 존재한다.

728x90
반응형