2017-03-07 1 views
1

해시 맵이 있습니다.키 반복, HashMap 4의 값을 한 번에

public HashMap<String, Integer> lines = new HashMap<String, Integer>(); 

그리고 첫 번째 4 개의 값이 뒤 따르고 아무것도 남지 않을 때까지 반복하고 싶습니다.

가장 적합한 방법은?

당신이 목록으로 모든 키를 얻기 위해 관리 할 수 ​​있다면 나는 그 방법은 당신이에 의해 그들을 얻을 수있을 것입니다 때문에 당신이 한 번에 4를 반복 할 수있는 모든 아침 :)

+2

시도한 내용과 달성하고자하는 내용을 게시 할 수 있습니까? –

+0

저는 자바 전문가가 아니므로 최선을 다합니다! 해시 맵에 이미지와 정수에 filepath를 저장하고 PDF에 쓰려고합니다. 하지만 PDF의 서식 때문에 4 개의 정수가 뒤 따르는 4 개의 이미지를 먼저 작성해야합니다 (즉, 이미지의 PDF의 다음 줄에 있음). –

+0

첫 번째 4 개의 키와 처음 4 개의 값은 무엇을 의미합니까! 어디로 돌아가고 싶니? –

답변

3

을하려고했는데 인덱스 위치,이

//get all keys as list 
List<String> list = new ArrayList<String>(lines.keySet()); 

//one iteration of this loop deals with 4 keys and 4 values. 
for(i=0; i<n; i=i+4) { 
    k1 = list.get(i); 
    v1 = lines.get(k1); 

    k2 = list.get(i+1); 
    v2 = lines.get(k2); 

    k3 = list.get(i+2); 
    v3 = lines.get(k3); 

    k4 = list.get(i+3); 
    v4 = lines.get(k4); 
} 

편집

같은 요소의 수는 4의 배수가 아닌 경우는, 당신은 같은 것을 할 수 있습니다

//get all keys as list 
List<String> list = new ArrayList<String>(lines.keySet()); 

//one iteration of this loop deals with 4 keys and 4 values. 
int mod = n%4; 
for(i=0; i<n-mod; i=i+4) { 
    k1 = list.get(i); 
    v1 = lines.get(k1); 

    k2 = list.get(i+1); 
    v2 = lines.get(k2); 

    k3 = list.get(i+2); 
    v3 = lines.get(k3); 

    k4 = list.get(i+3); 
    v4 = lines.get(k4); 
} 

//deal with last 1, 2 or 3 elements separately. 
if(mod>=1) { 
    k1 = list.get(i); 
    v1 = lines.get(k1); 

    if(mod>=2) { 
     k2 = list.get(i+1); 
     v2 = lines.get(k2); 

     if(mod>=3) { 
      k3 = list.get(i+2); 
      v3 = lines.get(k3); 
     } 
    } 
} 
+0

이것은 훌륭합니다 (그리고 작동합니다)! 그러나 목록의 크기를 모르는 경우 (1-43까지 표시 될 수 있음)이를 고려하는 방법이 있습니까? –

+0

@ J.Walsh 먼저 4의 가장 높은 배수까지 반복 한 다음 마지막 몇 가지 요소를 개별적으로 처리 할 수 ​​있습니다. 편집 된 답변을 참조하십시오. –

+0

대단히 감사합니다! 이것은 완벽 해! –