본문 바로가기

책리뷰/모던자바인액션

컬렉션 API 개선

728x90
반응형

자바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에서 상속받은 새 디폴트 메서드를 지원함과 동시에 스레드 안전성도 제공한다. 

 

 

 

출처 : 모던자바인액션

728x90
반응형