08. 컬렉션 API 개선
주요 내용
- 컬렉션 팩토리 사용
- 리스트 및 집합과 사용할 새로운 관용 패턴
- 맵과 사용할 새로운 관용 패턴
#
컬렉션 팩토리 사용Java 9
- 리스트 팩토리:
List.of(...)
- Unmodifiable Lists 를 반환
- 리스트를 바꿔야하는 상황이라면 카피를 떠서 직접 리스트 만들기
- 집합 팩토리:
Set.of(...)
- 맵 팩토리: 아래와 같이 두가지 방법이 있음
#
리스트 및 집합과 사용할 새로운 관용 패턴Java 8
Java 8 부터 List, Set에 removeIf, replaceAll, sort 를 제공함
#
removeIf#
replaceAll#
맵과 사용할 새로운 관용 패턴Java 8
#
forEach따로 Entry 선언 없이 람다 + forEach 로 순회
#
정렬Entry.comparingByValue
,Entry.comparingByKey
를 제공
#
기본값 조회- 값을 조회했는데 NPE 일 경우를 대비해
getOrDefault
를 제공
#
계산 패턴computeIfAbsent(key, lambda)
: key가 존재하지 않으면 lambda 결과를 맵에 추가computeIfPresent(key, lambda)
: key가 존재하면 lambda 결과를 맵에 교체- lambda 결과가 null이라면 key를 없애는데, 이런 기능은 remove가 더 적합하다
compute(key, lambda)
: key값에 대한 lambda 결과를 맵에 적용
#
삭제 패턴remove(key)
: 해당 키를 삭제remove(key, value)
: 해당 key가 value 와 동일하다면 삭제
#
교체 패턴replace(key, value)
: key가 있을경우 value로 교체replace(key, oldValue, newValue)
: oldValue가 기존 데이터와 동일할 경우 newValue로 교체replaceAll(BiFunction)
: BiFunction 결과로 value를 교체
#
합침 (Merging).merge
를 이용하면 값이 null 일때에 대한 상황도 처리해줌
추가적으로 ConcurrentHashMap 으로 동시성을 보장할 수 있는 맵을 지원함