Java - stream - Collectors.partitioningBy

최대 1 분 소요

Java - stream - Collectors.partitioningBy

  • streamcollect할 때, Collectors.partitioningBy(Predicate)를 사용하여 모으면 Predicate의 결과인 true, false를 key로, 그리고 원소는 각 value에 들어가는 Map이 생성됩니다.
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.*;

class Main {
    public static void main(String[] args) throws Exception {
        // Collectors.partitioningBy( Predicate )
        // Collectors.partitioningBy( Predicate)는 각 요소의 Predicate에 따라서
        // true, false로 나누어 줍니다.
        // true, false를 key로 가지고 value에 해당되는 원소들이 다 들어가 있죠.
        List<Integer> integerLst = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
        // 적용할 Predicate
        Predicate<Integer> isDiviedByTwo = (Integer x) -> x % 2 == 0;
        // 결과는 Map<Boolean, List<Integer>>의 형태로 저장되죠.
        Map<Boolean, List<Integer>> boolIntegerMap = integerLst.stream().collect(
                Collectors.partitioningBy( isDiviedByTwo )
        );
        for (boolean k : boolIntegerMap.keySet()) {
            System.out.printf("==== Key: %b\n", k);
            System.out.println(boolIntegerMap.get(k));
        }
        /*
        ==== Key: false
        [1, 3, 5, 7, 9]
        ==== Key: true
        [2, 4, 6, 8]
        */
    }
}

댓글남기기