영호
[JAVA] HashMap을 이용해 Enum인스턴스 조회하기 본문
개요
Enum을 활용하다 보면 filed값을 이용해 Enum 인스턴스를 조회해야 하는 경우가 있습니다. 이때, Stream, HashMap 등을 사용할 수 있습니다. 이 글에서는 HashMap을 활용한 Enum인스턴스 조회 방법을 알아보겠습니다.
HashMap활용 코드
package enumPractice;
import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public enum Number {
ONE(1),
TWO(2),
THREE(3);
private final int number;
Number(int number) {
this.number = number;
}
public int getNumber() {
return number;
}
private static final Map<Integer, Number> numbers =
Arrays.stream(Number.values())
.collect(Collectors.toMap(Number::getNumber, Function.identity()));
public static Number findNumber(int number) {
if (numbers.containsKey(number)) {
return numbers.get(number);
}
throw new IllegalArgumentException("존재하지 않는 field 입니다.");
}
}
- Stream을 활용해 "field : EnumInstance"형태의 HashMap을 생성합니다.
- Function.identity()의 경우 HashMap의 value에는 실제 instance가 들어가야 하기 때문에 사용합니다.
Arrays.asList("a", "b", "c")
.stream()
.map(Function.identity()) // <- 이것과
.map(str -> str) // <- 같습니다.
- 이후 findNumber함수의 parameter를 통해 HashMap에 접근해 값에 맞는 Enum instance를 반환합니다.
장점
- instance조회가 많이 발생하는 Enum의 경우 처음 HashMap을 만든 뒤에 이를 조회해서 반환해주기 때문에 성능 측면에서 이점을 얻을 수 있습니다.
'Language > JAVA' 카테고리의 다른 글
[JAVA] Collections.emptyList() vs List.of() (6) | 2023.03.18 |
---|---|
eqauls, hashCode(feat. 동일성과 동등성) (0) | 2023.03.04 |
[JAVA] Array를 stream으로 (Arrays.stream() vs Stream.of()) (0) | 2022.10.28 |
[JAVA] instance method vs static method (0) | 2022.10.04 |
[Java] Map인터페이스 - HashMap (0) | 2022.06.25 |
Comments