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 으로 동시성을 보장할 수 있는 맵을 지원함