JAVA9

Java 9에서 새로운 api를 지원하여 코드량은 줄고 가독성은 쉬워지도록 업그레이드 되었다.。

불변의 Collection 객체 생성 방식.

// 불변의 Set
Set<String> set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
set = Collections.unmodifiableSet(set);

// 불변의 List
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list = Collections.unmodifiableList(list);

Java8 부터 Stream API 사용하면 좀더 직관적인 코드로 구현할수 있다.

Set<String> set = Collections.unmodifiableSet(Stream.of("a", "b", "c").collect(toSet()));
List<Integer> list = Collections.unmodifiableList(Stream.of(1, 2, 3).collect(toList()));

#Java9的写法

Java 9 이런 부분이 간소화 되었고 아래와 같이 작성하면 됩니다.

Set<String> set = Set.of("a", "b", "c");
List<Integer> list = List.of(1, 2, 3);

마찬가지로 아래와 같이 조금 더 복잡한 collenction 도 동일하게 지원 됩니다.

Map<String, String> map = Map.of("a", "1", "b", "2", "c", "3");

유의해야 될 부분은 Map.of는 파라미터가 key와 value 로 무조건 쌍으로 이루어 집니다.

Map.of()
Map.of(k1, v1)
Map.of(k1, v1, k2, v2)
Map.of(k1, v1, k2, v2, k3, v3)
...

asList와의 차이점

List.of 와 Arrays.asList 들의 차이점:

  1. Java 9 의 List.of 변경할수 없는 List이며 Arrays.asList 는 변경 가능.

  2. List.of 와 Arrays.asList 모두 add와remove를 할수 없지만, Arrays.asList는 set을 이용하여 아이템을 변경할수 있지만 List.of 안됨.

  3. 강제로 변경 시도시 java.lang.UnsupportedOperationException 발생.

  4. List.ofnull 허용하지 않음,Arrays.asList null 허용

Last updated