반응형
반응형
자바 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 |