私はグーグルマルチマップを反復しなければなりません。だが
Googleコレクション(現在のGuava)はJava 1.5ライブラリです... Java 1.4のジェネリックの欠如を無視しても、おそらく追加されたものを使用します1.5、それを互換性のないものにしているということですが、Multimap
を反復処理するにはさまざまな方法があります。
すべての値を反復処理できます。
_for (Object value : multimap.values()) { ... }
_
またはすべてのキー(反復で複数回現れる複数の値にマップするキー):
_for (Object key : multimap.keys()) { ... }
_
またはキーセット:
_for (Object key : multimap.keySet()) { ... }
_
またはエントリ:
_for (Map.Entry entry : multimap.entries()) { ... }
_
または、値Collection
s:
_for (Collection collection : multimap.asMap().values()) { ... }
_
Bwawokで説明されているように、Collection
を使用して、keySet()
の各キーに対応するget
を取得することもできます。
編集: Java 1.4にはforeachループもなかったため、当然、上記の各ループは次のように記述する必要があります。 Iterator
sを直接使用します。
私はJava 6にいますが、これはかなり近いはずです...何かJava 1.4ishを逃したら申し訳ありません
Set keySet = listmultimap.keySet();
Iterator keyIterator = keySet.iterator();
while (keyIterator.hasNext() ) {
String key = (String) keyIterator.next();
List values = listmultimap.get( key );
}
Getを実行するたびに、そのキーに一致したすべてのものが戻されます。次に、それらをはがすか、好きなように操作します。
グアバマルチマップを使用する場合、値はリストではなくコレクションに保存されます
Set<String> keys = multiMap.keySet();
for (String keyprint : keys) {
System.out.println("Key = " + keyprint);
Collection<String> values = multiMap.get(keyprint);
for(String value : values){
System.out.println("Value= "+ value);
}
}
最小限の例は次のとおりです。
public class Test {
public static void main(String[] args) {
ListMultimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("hello", " name");
multimap.put("hello", " name2");
multimap.put("world", " ocean");
for (String firstName : multimap.keySet()) {
List<String> lastNames = multimap.get(firstName);
System.out.println(firstName + " " + lastNames);
}
}
}
そして出力:
world [ ocean]
hello [ name, name2]