728x90

일반적인 수단

// 변경불가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);

자바 8
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()));

자바9
조금더 간단해졌다.

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

마찬가지로 아래와 같은 map 타입은 아래와 같이 작성 가능하다.

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

주의 ! key ,value 가 쌍으로 나타나므로 파라미터는 무조건 짝수 이다.

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

그리고 갑자기 asXxx() 등 함수들이 자주 등장하는데 차이가 면지 궁금하지 않는가?
List.of vs Arrays.asList 를 예로 들면

  1. List.of -> 변경불가
  2. Arrays.asList -> 변경가능 ( 주의 , 사실 요놈은 애매한 놈임. 변경불가능이긴 하지만 set을 이용하 변경가능함.헷갈리지? 하지만 List.of는 아예 안됨. set을 호출시 java.lang.UnsupportedOperationException 이 나온다!)
  3. List.of null 허용하지않음 ,Arrays.asList null 허용

+ Recent posts