개발

java 배열에서 동일한 내용의 카운트를 체크해보자.

cozynow 2020. 11. 22. 01:28

아래와 같은 배열에서 각 요소의 건 수를 카운트해서 출력해 보자.

["손오공", "사오정", "토마토", "손오공", "저팔계", "삼장법사", "손오공", "저팔계"]

 

물론  for문과 if문을 사용하기 말고 해야한다면....?

 

아래 2가지 방법을 소개했다.

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Hash01 {
    public static void main(String[] args) {
        String[] participant = {"손오공", "사오정", "토마토", "손오공", "저팔계", "삼장법사", "손오공", "저팔계"};
        
        Map<String, Long> participantMap = Arrays.asList(participant).stream()
                .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

        participantMap.forEach((key, value) -> System.out.println("key : "+ key + ",  value : "+ value));
        System.out.println("==========");
        
        HashMap<String, Integer> hm  =  new HashMap<>();
        for(String player : participant) hm.put(player, hm.getOrDefault(player, 0) +1);
        hm.forEach((key, value) -> System.out.println("key : "+ key + ",  value : "+ value));

    }

}

1. 스트림을 이용해서 건 수를 체크해서 맵에 담았다.

2. 맵에서 1.8 버전 부터 지원하는 getOrDefault를 함수를 사용했다.

   - 한땐,  null 여부를 체크해서 값을 셋팅해줬는데 

 

역시 코딩은 계속 해야한다.