getOrDefault
우리가 흔히 알고 있는 map의 메서드중 getOrDefault 메서드는 키값이 없으면 두번째 인자를 반환하는 것으로 알고있다.
평소에 코딩 문제를 풀때, Map<Integer, Integer> 같은 map에 key, value를 넣어줄 때 해당 메서드를 이용해,
key가 존재한다면 해당 key의 value를 가져와서 +해주고,
key가 존재하지 않는다면 default값에 + 해서 값을 넣어줬다.
예시
map.put("key", map.getOrDefault("key", "default값") + "더해줄 값");
하지만 value가 문자열 또는 정수형이 아닌 리스트일 때는 어떻게 값을 추가해줘야 할까?
Map<String, List<String>> strListMap = new HashMap<>();
// 기본값 넣기
List<String> list = strListMap.getOrDefault("locale", new ArrayList<>());
list.add("ko_KR");
strListMap.put("locale", list);
이런식으로 작성을 해줘야 하는데, 이 코드를 computeIfAbsent와 람다로 한줄로 줄일 수가 있다.
computeIfAbsent
Map<String, List<String>> strListMap = new HashMap<>();
// 기본값 넣기
strListMap.computeIfAbsent("locale", key -> new ArrayList<>()).add("ko_KR");
Java8버전 이후 람다와 Stream API의 등장으로 편의성을 느끼고, 필요성을 깨닫고 있는 요즘, 틈틈히 공부해야겠다는 생각이 들게 만드는 포스팅이었다.
📗참고사이트
'Languages | Frameworks > Java' 카테고리의 다른 글
Java) 2차원 배열 오름차순 정렬(Arrays.sort 람다식) (0) | 2023.01.27 |
---|---|
Java) List와 ArrayList의 차이? (0) | 2022.11.08 |
JPA, JPQL (0) | 2022.09.27 |
암호화 알고리즘 종류와 추천(SHA, PBKDF2, Bcrypt) + Java 적용 샘플 (0) | 2022.07.18 |
게시판 글이 중간에 삭제시 > 번호 초기화후 인덱싱 하는 방법 (0) | 2022.07.13 |