IT/Java

Map 처리

김 정 환 2022. 12. 19. 19:36
반응형
반응형

 

자바 8 이후에 추가된 Map의 디폴트 메서드를 다루어 보겠습니다. 

 

맵을 이용할 것이기 때문에 기본 데이터를 생성하겠습니다. 아래 맵으로 계속 이어나가겠습니다.

Map<String, String> alphabets = new HashMap<>(Map.ofEntries(
  entry("1", "a"),
  entry("2", "b"),
  entry("3", "c"),
  entry("4", "d"),
  entry("5", "e")
));

 

 

 

forEach()

맵에서 키와 값을 반복하면서 확인하는 작업은 꽤나 번거롭습니다. for문으로 몇 줄 작성해야 합니다. 이러한 번거로움을 forEach 메서드로 간단하게 할 수 있습니다.

alphabets.forEach((key, value) -> System.out.println(value + " is " + value));

// 1 is a
// 2 is b
// 3 is c
// 4 is d
// 5 is e

 

 

 

getOrDefault()

맵에서 원하는 key의 value를 가져오려고 할 때 없으면 null이 반환됩니다. NullPointerException을 방지하기 위해서 기본값을 설정할 수 있습니다.

System.out.println(alphabets.get("0"));
// null

System.out.println(alphabets.getOrDefault("No Alphabet"));
// No Alphabets

 

 

 

정렬 메소드

Entry.comparingByValue와 Entry.comparingByKey 유틸리티를 사용하여 정렬할 수 있습니다.

alphabets.entrySet()
         .stream()
         .sorted(Entry.comparingByKey())
         .forEachOrdered(System.out::println);

// 1=a
// 2=b
// 3=c
// 4=d
// 5=e

 

 

 

계산 메서드

computeIfAbsent 메서드는 key가 없으면 (없거나 null이면), key를 이용해 새 값을 계산하고 맵에 추가합니다.

computeIfPresent 메서드는 key가 있으면, 새 값을 계산하고 맵에 추가합니다.

compute 메서드는 제공된 키로 새 값을 계산하고 맵에 추가합니다.

alphabets.computeIfAbsent("6", key -> "f");
// {1=a, 2=b, 3=c, 4=d, 5=e, 6=f}

alphabets.computeIfPresent("1", (key, value) -> value.toUpperCase());
// {1=A, 2=b, 3=c, 4=d, 5=e, 6=f}

alphabets.compute("0", (key, value) -> "No Alphabet");
// {0=No Alphabet, 1=A, 2=b, 3=c, 4=d, 5=e, 6=f}

 

 

 

삭제 메서드

for문 없이 삭제하는 것도 물론 가능합니다.

alphabets.remove("0")
// {1=A, 2=b, 3=c, 4=d, 5=e, 6=f}

 

 

 

교체 메서드

for문 없이 교체하는 것도 완전 가능합니다.

alphabets.replace("1", "a");
// {1=a, 2=b, 3=c, 4=d, 5=e, 6=f}


alphabets.replaceAll((key, value) -> value.toUpperCase());
// {1=A, 2=B, 3=C, 4=D, 5=E, 6=F}

 

 

 

합침 메서드

두 개의 맵을 합칠 수도 있습니다.

Map<String, String> nextAlphabets = new HashMap<>(Map.ofEntries(
  entry("5", "E"),
  entry("6", "F"),
  entry("7", "G"),
  entry("8", "H"),
  entry("9", "I")
));

nextAlphabets.forEach((key, value) -> 
  alphabets.merge(key, value, (value1, value2) -> value1 + " & " + value2)
);
// {1=A, 2=B, 3=C, 4=D, 5=E & E, 6=F & F, 7=G, 8=H, 9=I}

 

반응형

'IT > Java' 카테고리의 다른 글

동시성(Concurrency) 과 병렬성(Parallel)  (0) 2023.01.10
Optional 클래스 사용  (0) 2023.01.08
Arrays.asList() vs ArrayList()  (0) 2022.12.19
팩토리 패턴 (Factory Pattern)  (0) 2022.11.07
[함수형 데이터 처리] 스트림  (2) 2022.09.25