클로이의 데이터 여행기

[JAVA] 같은 key인 경우, value에 리스트(list)로 담기 본문

JAVA

[JAVA] 같은 key인 경우, value에 리스트(list)로 담기

징느K 2018. 10. 22. 19:39

 이번 메소드는 'HashMap에 key 단위로 value를 ArrayList로 담는 기능'을 수행한합니다.

key를 primary key로 삼아, 같은 key인 value(ex.키워드)을 ArrayList로 담습니다.

 

이번 내용부터는 변수설명보다는 코드를 어떻게 구성했는지 설명하고자 합니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public static HashMap<String, ArrayList<String>> joinDic(String[] arr) {
// ①
        HashMap<String, ArrayList<String>> dic = new HashMap<String, ArrayList<String>>();
        for ( int i=0;i<arr.length;i++) {
            String[] line = arr[i].split(","); // ②
            String key = line[5]; //③
 
            ArrayList<String> list = new ArrayList<String>();
            if (dic.containsKey(key)) { //⑤
                list = dic.get(key); //⑤-1
                list.add(line[13]);                
            }else {
                list.add(line[13]); //⑤-2
            }
            dic.put(key,list); //⑥
        }
        for (String key : dic.keySet() ) { //⑦
            System.out.println(key);
        }
        return dic;
        
    }
cs

 

 

 

 

 

 

 

 

 

 

 

프로세스는 다음과 같습니다:D

 

① dic 이라는 이름으로 hashmap을 선언

② arr에 담긴 데이터를 쉼표를 기준으로 split하여 변수 line에 담음

③ line에 담긴 내용 중 6번째 내용(line[5])를 변수 key에 담음

④ list 라는 이름으로 arraylist를 선언

⑤ key가 dic(hashmap)에 있는지 확인

⑤-1 있을 때는 list에 담겨있는 value 가져온 뒤, line의 12번째 내용(line[13])을 더함

⑤-2 없을 때는 list에 곧바로  line의 12번째 내용(line[13])을 더함

⑥ 변수 key를 dic의 key값으로 변수 list를 dic의 value값으로 더함

⑦ 정상적으로 hashmap에 들어갔는지 확인하기 위함 (*없어도 되는 부분)

 

 

 

이번 메소드를 작성하면서 가장 헷갈렸던 부분은 '⑤-1'이었습니다.

dic에서 value를 찾아오는 작업을 놓쳐 list가 계속 리셋되고 있던 문제가 있었습니다.

 

기존에 값(list)에 무언가를 더하고자(line[13]) 한다면, 

기존의 값(list)을 찾아오는 코드(⑤-1)가 필요하다는 사실을 다시한번 배울 수 있었습니다!

 

 

 

 

 

Comments