지금 이 현재
GitHub
  • INTRO
  • CATEGORY
    • Java
      • JVM(Java Virtual Machine)
      • System.arraycopy()
      • toArray 함수 호출 시 빈 배열을 전달해야 하는 이유
      • POI Excel 인쇄 영역, 페이지 나누기 설정
      • Overloading & Overriding
      • Functional Interface
      • computeIfAbsent 메소드를 알아보자
    • Computer Science
      • 캐리지 리턴 문자('\r')
    • Kotlin
      • Java 와 다른 Kotlin
    • C++
      • ios_base::sync_with_stdio 의 역할과 사용 이유
    • Javascript
      • 자바스크립트 기본 - 문법
      • 자바스크립트 기본 - 함수
    • MySQL
      • EXPLAIN
    • Android
      • Android 기초
    • Error
      • macOS 업데이트 후 mysql 실행 에러
    • Algorithm
      • 모듈러 산술 (Modular Arithmetic)
  • BOOK
    • 헤드퍼스트 디자인 패턴
      • 전략 패턴(Strategy Pattern)
      • 옵저버 패턴(Observer Pattern)
      • 커맨드 패턴(Command Pattern)
      • 데코레이터 패턴(Decorator Pattern)
    • 자바의 정석
      • Chapter 14. Lambda & Stream
    • 함께 자라기
      • 자라기
  • STUDY
    • 99클럽
      • [99클럽 코테 스터디 1일차 TIL] 프로그래머스 - n^2 배열 자르기
      • [99클럽 코테 스터디 2일차 TIL] 프로그래머스 - x만큼 간격이 있는 n개의 숫자
      • [99클럽 코테 스터디 3일차 TIL] 프로그래머스 - 문자열 내 마음대로 정렬하기
      • [99클럽 코테 스터디 4일차 TIL] 프로그래머스 - JadenCase 문자열 만들기
      • [99클럽 코테 스터디 5일차 TIL] 프로그래머스 - 전화번호 목록
      • [99클럽 코테 스터디 6일차 TIL] 프로그래머스 - 의상
      • [99클럽 코테 스터디 7일차 TIL] 프로그래머스 - 하노이의 탑
      • [99클럽 코테 스터디 8일차 TIL] 프로그래머스 - 기능개발
      • [99클럽 코테 스터디 9일차 TIL] 프로그래머스 - 더 맵게
      • [99클럽 코테 스터디 10일차 TIL] 프로그래머스 - 이중우선순위큐
      • [99클럽 코테 스터디 11일차 TIL] 프로그래머스 - 카드 뭉치
      • [99클럽 코테 스터디 12일차 TIL] 프로그래머스 - H-Index
      • [99클럽 코테 스터디 13일차 TIL] 백준 - 숫자 카드
      • [99클럽 코테 스터디 14일차 TIL] 백준 - 숫자 카드 2
      • [99클럽 코테 스터디 15일차 TIL] LeetCode - Prefix and Suffix Search
      • [99클럽 코테 스터디 16일차 TIL] 프로그래머스 - 모음사전
      • [99클럽 코테 스터디 17일차 TIL] 백준 - 촌수계산
      • [99클럽 코테 스터디 18일차 TIL] 백준 - 단지번호붙이기
      • [99클럽 코테 스터디 19일차 TIL] 프로그래머스 - 구명보트
      • [99클럽 코테 스터디 20일차 TIL] 프로그래머스 - 큰 수 만들기
      • [99클럽 코테 스터디 21일차 TIL] 프로그래머스 - 피보나치 수
      • [99클럽 코테 스터디 22일차 TIL] 프로그래머스 - 멀리 뛰기
      • [99클럽 코테 스터디 23일차 TIL] 프로그래머스 - 마법의 엘리베이터
      • [99클럽 코테 스터디 24일차 TIL] 프로그래머스 - 대충 만든 자판
      • [99클럽 코테 스터디 29일차 TIL] LeetCode - Longest Increasing Subsequence
      • [99클럽 코테 스터디 31일차 TIL] 백준 - 점프 점프
      • [99클럽 코테 스터디 32일차 TIL] 프로그래머스 - 무인도 여행
      • [99클럽 코테 스터디 33일차 TIL] 프로그래머스 - 리코쳇 로봇
      • [99클럽 코테 스터디 34일차 TIL] 프로그래머스 - 타겟 넘버
      • [99클럽 코테 스터디 35일차 TIL] 프로그래머스 - 게임 맵 최단거리
      • [99클럽 코테 스터디 36일차 TIL] 프로그래머스 - 전력망을 둘로 나누기
      • [99클럽 코테 스터디 37일차 TIL] 백준 - 부등호
Powered by GitBook
On this page
  1. CATEGORY
  2. Java

computeIfAbsent 메소드를 알아보자

ComputeIfAbsent 메소드에 대해 알아봅니다.

Map<String, List<String>> results = new HashMap<>();

String key = "KEY";

if (!results.containsKey(key)) {
    results.put(key, new ArrayList<>());
}

results.get(key).add(s);

알고리즘을 풀다가 위와 같은 로직을 작성할 때가 있는데 한 줄로 처리 가능한 유용한 메소드가 있어 알아봤습니다.

Map 인터페이스에 default 메소드로 선언되어 있는 computeIfAbsent 라는 메소드인데 하는 역할은 위 코드와 동일합니다. Map 에 key 에 해당하는 값이 없다면 해당 key 와 전달된 값을 Map 에 넣고 있는 경우엔 key 에 해당하는 값을 가져와서 추가로 처리하는 것입니다. 위에선 리스트가 그 값이 되기 때문에 add 메소드를 통해서 s 라는 값을 추가하는걸 볼 수 있습니다.

위 로직을 computeIfAbsent 메소드를 사용하여 수정하면 아래와 같습니다.

Map<String, List<String>> results = new HashMap<>();

String key = "KEY";

results.computeIfAbsent(key, k -> new ArrayList<>()) // key 에 해당하는 값이 없으면 새로운 리스트를 값으로 해서 저장하고 가져온다.
       .add(s); // key 에 해당하는 값인 리스트에 s 값을 할당한다.

computeIfAbsent 는 아래와 같이 구현되어 있습니다.

default V computeIfAbsent(K key,
            Function<? super K, ? extends V> mappingFunction) {
        Objects.requireNonNull(mappingFunction);
        V v;
        if ((v = get(key)) == null) {
            V newValue;
            if ((newValue = mappingFunction.apply(key)) != null) {
                put(key, newValue);
                return newValue;
            }
        }

        return v;
    }

로직을 보면 key 로 가져온 값 v 가 null 이고 파라미터로 전달된 mappingFunction 함수를 실행하여 얻은 결과 값 newValue 가 null 이 아니면 key 와 결과 값을 맵에 할당하고 해당 결과 값을 반환합니다.

v 가 null 이 아니거나 newValue 가 null 이면 v 를 그대로 반환합니다. 값을 그대로 반환한다고 보면 됩니다.

앞으로도 알고리즘을 풀다보면 Map 을 쓸 일이 많을텐데 computeIfAbsent 메소드를 활용해보면 가독성을 해치지 않으면서 코드 줄 수를 줄일 수 있을 것 같습니다.


PreviousFunctional InterfaceNextComputer Science

Last updated 8 months ago

참고 자료 :

Java docs