我有一個散列表。迭代鍵,HashMap 4的值一次
public HashMap<String, Integer> lines = new HashMap<String, Integer>();
我想返回前4個鍵,然後是前4個值,然後重複,直到沒有剩下任何東西。
如何做到最好?
我一直在嘗試所有的早晨:)
我有一個散列表。迭代鍵,HashMap 4的值一次
public HashMap<String, Integer> lines = new HashMap<String, Integer>();
我想返回前4個鍵,然後是前4個值,然後重複,直到沒有剩下任何東西。
如何做到最好?
我一直在嘗試所有的早晨:)
如果你能設法得到所有鍵的列表,那麼你可以在同一時間重複他們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);
}
}
}
這是輝煌的(和作品)!但是,如果我不知道列表的大小(可能是1-43之間的任何值),有沒有辦法考慮這一點? –
@ J.Walsh你可以先迭代4次的最高倍數,然後分別處理最後幾個元素。見編輯的答案。 –
非常感謝!太棒了! –
您能否請您發佈您嘗試過的以及您想要實現的目標? –
我不是Java專家,所以讓我盡我所能!我將一個文件路徑存儲到一個圖像和一個整數,並將它們寫入PDF。但由於PDF的格式化,我需要首先寫入四個圖像,然後是四個整數(因此它們位於圖像下面的PDF的下一行)。 –
前4個鍵和前4個值意味着什麼!你想要返回的地方? –