2017-03-07 8 views
1

私はハッシュマップを持っています。キーの反復、一度にHashMap 4の値

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

と私は最初の4つの値が続く最初の4つのキーを、返し、何も残っがなくなるまで繰り返すようにしたいと思います。

これを行うにはどうすればよいですか?

あなたがリストとしてすべてのキーを取得するために管理することができる場合、私はそのようにはあなたがでそれらを得ることができるようになるので、あなたが一度に4を繰り返すことができ、すべての午前:)

+2

あなたが試したことと達成したいことを投稿できますか? –

+0

私はJavaの専門家ではないので、最善を尽くしましょう!私はハッシュマップにイメージと整数のファイルパスを保存し、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); 
} 

EDIT

のようなものの要素の数は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

ありがとうございます!これは完璧です! –

関連する問題