자바 Collectors.toMap & Map.merge

Kyu·2023년 1월 18일
0

Java 공부기록

목록 보기
38/40

Collectors.toMap()

  • 파라미터 2개 3개 4개 받을 수있다
  • 셋다 기본적으로 (Function keyMapper, Function valueMapper) 를 받는다.
  • 의미는 스트림 원소들 순회해서 key 랑 value 로 만들어서 map 으로 리턴한다는 뜻이다.
  • 예를 들어 Person 이라는 객체가 있으면 아래 이미지 처럼 Map 으로 만들 수 있다.
  • 파라미터 3개 들어가는건 (Function keyMapper, Function valueMapper, Function mapper) 인데 key가 중복으로 왔을때 어떻게 처리할건지 보여주는 것이다.
  • key 가 중복이면 newValue 에다가 oldValue 를 더한 값을 Value 로 지정하겠다는 말이다.
  • 파라미터가 4개 들어가는건, 마지막 네번째 파라미터는 Map 에서 특정 구현체를 선택하고 싶을때 넣을 수 있다. 기본은 HashMap 이다

map.merge()

  • Map.merge() 메소드도 그런식으로 동작한다.
Map<String, Integer> map = new HashMap<>();  
for (String[] strings : collect) {  
    for (String string : strings) {  
        if (map.get(string) == null) {  
            map.put(string, 1);  
        } else {  
            map.put(string, map.get(string) + 1);  
        }  
    }  
}
  • 위 코드는 merge 를 사용하지 않고 직접 클라이언트가 로직을 작성한 방식이다.
  • String 배열을 돌려서 map 에 해당 String key 가 존재하지 여부를 판별하여 기본값을 1로 두고 key가 겹치면 +1을 더하는 방식이다.
  • 위 코드가 정확히 아래코드와 일치하게 동작한다.
Map<String, Integer> map = new HashMap<>();  
for (String[] strings : collect) {  
    for (String string : strings) {  
		map.merge(string, 1, Integer::sum);
    }  
}
profile
TIL 남기는 공간입니다

0개의 댓글