자바9에서 작은 컬렉션 객체를 쉽게 만들 수 있는 방법을 제공한다.
String List를 만들 때
List<String> friends = Arrays.asList("Rophael", "Olivia", "Thibau");
고정 크기의 리스트를 만들었지만 요소를 추가하거나 삭제할 수 없다.
UnsupportedOperationException 예외 발생
위의 List에 friends.add("aaaa"); 이런식으로 요소를 추가할 경우 예외가 발생한다.
내부적으로 고정된 크기의 변환할 수 있는 배열로 구현되어 있기 때문이다.
List<String> friends = List.of("Raphel", "Olivia", "Thibaut");
friends.add("Chih-Chun");
List.of 팩토리 메소드를 이용해 리스트를 만들 수 있지만 여전히 에러가 발생한다.
변경할 수 없는 리스트이기 때문이다.
리스트를 바꿔야하는 경우는 직접 리스트를 만들어 사용해야한다.
Map역시 만들 수 있는데 key, value를 연속해서 쓰면 Map으로 생성된다.
역시 바꿀 수 없는 맵으로 초기화만 가능하다.
Map, Entry를 이용해서 만들 수도 있다.
리스트와 집합처리
JAVA 8에서 List, Set 인터페이스에 추가된 메서드
- removeIf : 프레디케이트를 만족하는 요소를 제거한다.
- replaceAll : 리스트에 이용할 수 있는 기능으로 UnaryOpetor 함수를 이용해 요소를 바꾼다.
- sort: List 인터페이스에서 제공하는 기능으로 리스트를 정렬한다.
컬렉션을 바꾸는 동작은 에러를 유발하기 때문에 위와 같은 메서드가 추가되었다.
맵처리
foreach
for문을 이용해서 key와 value를 출력하는 코드를 간단하게 줄일 수 있다.
정렬메서드
Entry.comparingByValue
Entry.comparingByKey
를 이용해서 키 또는 값을 기준으로 정렬할 수 있다.
ConcurrentHashMap
리듀스와 검색을 지원한다.
- forEach : 각(키,값) 쌍에 주어진 액션 실행
- reduce : 모든(키,값) 쌍을 제공된 리듀스 함수를 이용해 결과로 합침
- search : 널이 아닌 값을 반환할 때까지 각(키,값) 쌍에 함수를 적용
정리
- JAVA9는 적의 원소를 포함하며 바꿀 수 없는 집합, 맵을 쉽게 만들 수 있도록 List.of, Set.of, Map.of, Map.ofEntries 등의 컬렉션 팩토리를 지원한다.
- 이들 컬렉션 팩토리가 반환한 객체는 만들어진 다음 바꿀 수 없다.
- List인터페이스는 removeIf, replaceAll, sort 세가지 디폴트 메서드를 지원한다.
- Set 인터페이스는 removeIf 디폴트 메서드를 지원한다.
- Map인터페이스는 자주사용하는 패턴과 버그를 방지할 수 있도록 다양한 디폴트 메서드를 지원한다.
- ConcurrentHashMap은 Map에서 상속받은 새 디폴트 메서드를 지원함과 동시에 스레드 안전성도 제공한다.
출처 : 모던자바인액션
'책리뷰 > 모던자바인액션' 카테고리의 다른 글
모던자바인액션 12강 Date, Calendar 날짜와 시간 API (0) | 2022.01.25 |
---|---|
모던자바인액션 11강 Optional (0) | 2022.01.24 |
JAVA 병렬 스트림 사용시 고려할 점 (0) | 2022.01.08 |
람다란 무엇인가 (0) | 2022.01.03 |
자바 스트림 처리 (0) | 2022.01.03 |