2017-03-07 63 views
1

我有一個散列表。迭代鍵,HashMap 4的值一次

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

我想返回前4個鍵,然後是前4個值,然後重複,直到沒有剩下任何東西。

如何做到最好?

我一直在嘗試所有的早晨:)

+2

您能否請您發佈您嘗試過的以及您想要實現的目標? –

+0

我不是Java專家,所以讓我盡我所能!我將一個文件路徑存儲到一個圖像和一個整數,並將它們寫入PDF。但由於PDF的格式化,我需要首先寫入四個圖像,然後是四個整數(因此它們位於圖像下面的PDF的下一行)。 –

+0

前4個鍵和前4個值意味着什麼!你想要返回的地方? –

回答

3

如果你能設法得到所有鍵的列表,那麼你可以在同一時間重複他們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. 
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

非常感謝!太棒了! –