getOrDefault
프로그래머스 문제를 푸는 중 getOrDefault라는 api를 접했다. 해당 api는 Java 8 에서 추가된 Collection API 중 하나이다.
Map에 추가된 API로 아래 코드와 같이 구현되어 있다.
default V getOrDefault(Object key, V defaultValue) {
V v;
return (((v = get(key)) != null) || containsKey(key))
? v
: defaultValue;
}
1. 임시변수 v를 선언한 후 get(Key)를 통해 얻은 값을 저장한 후 null이 아닌지를 확인한다.
2. contains(key)를 통해서 해당 키가 존재하는지 다시 한번 확인
3. 둘 다 false일 경우 파라미터로 넘긴 defaultValue가 return 되고 만약 true일 경우 v 즉 get(key) 한 값이 return 된다.
예제 코드
String[] strArr = {"A", "a", "B","b","C","C"};
HashMap<String, Integer> map = new HashMap<>();
for (String s: strArr) {
map.put(s, map.getOrDefault(s, 0) + 1);
}
System.out.println("===" + map);
//{A=1, a=1, B=1, b=1, C=2}
foreach문을 순차적으로 돌면서 보자
1번째 - map.put("A", map.getOrDefault("A",0) + 1) = A라는 키 값을 put 하기전 getOrDefault를 통해 A의 값과 키를 확인한 후 없기 때문에 0을 retrun 한 후 +1을 하기 때문에 "A" : 1 이라는 key-value가 들어간다. \
2번째 - map.put("a", map.getOrDefault("a",0) + 1) = 1번째와 동일하게 a라는 키 값이 존재하지 않았기 때문에 0을 return 후 +1 된 value가 들어간다.
위와같이 돌면 최종적으로 {A=1, a=1, B=1, b=1, C=2}라는 key-value 쌍들이 들어가게 된다.
'개발 > java' 카테고리의 다른 글
[JAVA]클래스, 객체, 인스턴스 (0) | 2023.07.20 |
---|---|
[JAVA]Call By Reference, Call By Value (0) | 2023.07.14 |
[JAVA]JVM (0) | 2023.07.06 |
[JAVA]String (0) | 2023.07.04 |
[JAVA]JVM, JRE, JDK (0) | 2023.07.03 |