2017-11-13 2 views
-3
내가 중첩 된지도를 사용

에서 같은 맵에서 두 개의 동일한 요소가있는 경우 알고 내가지도, studentId, subject, major의 세 가지 요소를 넣어.어떻게</p> <pre><code>Map<String,Map<String,List<String>>> scheduleMap = new HashMap<>(); </code></pre> <p>자바

입력로서는

,

scheduleMap1.add("30600001", "INFO1105", "IT"); 
    scheduleMap1.add("30600001", "ELEC1603", "ElecEng"); 
    scheduleMap1.add("30600002", "INFO1103", "IT"); 
    scheduleMap1.add("30600003", "INFO1003", "IT"); 
    scheduleMap1.add("30600001", "ELEC1601", "ElecEng"); 
    scheduleMap1.add("30600002", "INFO1003", "IT"); 
    scheduleMap1.add("30600002", "ELEC1603", "ElecEng"); 
    scheduleMap1.add("30600001", "INFO1003", "IT"); 

는지도에 넣었다.

최종 목적은 각 학생 ID 30600001, 30600002 및 30600003에 대해 키에 두 개의 동일한 전공이 저장된 경우 그 수가 증가해야한다는 것입니다.

예를 들어, 예에서와 같이 30600001은 주요 요소로 두 개의 "IT"와 두 개의 "ElecEng"를 가지고 있습니다. 카운트가 studentId, 30600002 2.

같아야한다 그래서, 내가 달성 할 수 카운트가 1

을해야한다, 그래서 두 사람은 "IT는"그러나 주요 요소로 하나의 "ElecEng"가 가지고 내 다음과 같이 코딩에 의한 목표 :

for(Entry<String, Map<String, List<String>>> studentId : scheduleMap.entrySet()) { 

for(Entry<String, List<String>> subject : studentId.getValue().entrySet()) 
{ 
    for(String major : subject.getValue()) 
    { 
     if(major.contains("IT")) 
     { 
     it++; 
     } else if(major.contains("ElecEng")) { 
      elec++; 

     } 
      if(it >= 2 || elec >= 2) 
      { 
      count++; 
      } 
    }  

그러나, 등 찾는 주요 major.contains("IT")major.contains("ElecEng")을 지적하지 않음으로써 수를 얻을 수있는 방법이있다?

내가 정말 좋아하는 일을 증가 수를 얻으려면,

if(everytime key.subject.major has two identical elements) 
{ 
    count++; 
} 

어떤 도움도 좋은 것입니다. 감사!

+0

지도에는 'add' 메소드가없고'put' 메소드에는 3 개의 값이 아닌 키 + 값이 필요합니다. 따라서 당신의 예는 많은 의미를 갖지 않습니다. –

+0

'scheduleMap1.add (a, b, c); 대신'scheduleMap1.put (key, value)'가 아니어야합니까? – procrastinator

+0

아, 맵에 3 개의 요소를 넣을 때 별도로 메서드를 추가했습니다. –

답변

4

지도는 일반적으로 동일한 키가있는 두 개의 키 - 값 세트를 지원하지 않습니다. 각각의 모든 키는 고유해야합니다. Refer to this.

관련 문제