이 코드는 EnumMap이 아닌 고유한 맵 구현체를 사용했기 때문에 EnumMap을 써서 얻은 공간과 성능 이점이 사라진다는 단점이 있습니다. 좀 더 자세히 살펴보면
매개변수 3개짜리 Collectors.groupingBy 메서드는 mapFactory 매개변수에 원하는 맵 구현체를 명시해 호출할 수 있습니다.
1
2
3
4
// EnumMap을 이용해 데이터 열거 타입과 매핑
System.out.println(Arrays.stream(garden).collect(groupingBy(p->p.lifeCycle,()->newEnumMap<>(LifeCycle.class),toSet())));
맵을 빈번히 사용하는 프로그램에는 도움이 될 것입니다.
스트림을 사용하면 EnumMap만 사용했을 때와는 다른 점이 있습니다. EnumMap 버전은 언제나 식물의 생애주기당 하나씩의 중첩 맵을 만들지만, 스트림 버전은 해당 생애주기에 속하는 식물이 있을 떄만 만듭니다.