본문 바로가기

Programming!

Java 8 Enum을 기준으로 Map<EnumObject, List<Object>>형태 만들어보기

유형enum클래스가 있어서 해당 enum 속성 기준으로 map을 만들고자 할 경우.


만일 GeographyType enum이 존재하고 해당 type별 목록을 가져오고자 할 경우.

public enum GeographyType {
    station, hotel, region, point, airport;
}



Map<GeographyType, List<HotKeyword>> map =
                Arrays.stream(GeographyType.values()).collect(Collectors.toMap(Function.identity(), e -> findHotKeywords(e)));




별개로 stream을 사용하다보니 나도 모르게 그냥 lists.stream().xxx를 하게 된다. 이게 null에 대한 처리가 안되어 있는 list기준 소스에서는 NullPointerException을 발생하게 되는데 이 코드를 nullable 하게 Optional.ofNullable로 감싸던지 하면 코드가 상당히 길어지고, 모양이 없어져 버리는 느낌아닌 느낌이 든다.


뭐, 애초에 업무용 코드는 단순하고 어느정도는 절차적으로 짜야 한다는 쓸데없는 사상으로 인해 모양이 없는건 당연한데, 그래도 너무 이상해 진다.


기존

// 없을경우 return시켜버림.

if( CollectionUtils.isEmpty( myLists ) ){

    return new ArrayList<>();

}


변경

// 주욱~~

Optional.ofNullable(myLists).orElse(Collections.emptyList()).stream().filter(xxxx).map(xxxxx).collect(xxx)

또는 오류 throw

Optional.ofNullable(myLists).orThrows(() -> new MyException(someArgument)).stream().map(xxxxx).collect(xxx)



음.. 고민스럽군.