web-dev-qa-db-ja.com

グーグルマルチマップを反復する方法

私はグーグルマルチマップを反復しなければなりません。だが

  1. Jdk 1.4を使用していますが、上位バージョンに切り替えることができません。だから私は一般的な機能を使用することはできません。
  2. 私のマルチマップは、キーに対して複数の値を持つことができます。
  3. マルチマップの値自体がマルチマップである場合があります。
24

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()) { ... }
_

または、値Collections:

_for (Collection collection : multimap.asMap().values()) { ... }
_

Bwawokで説明されているように、Collectionを使用して、keySet()の各キーに対応するgetを取得することもできます。

編集: Java 1.4にはforeachループもなかったため、当然、上記の各ループは次のように記述する必要があります。 Iteratorsを直接使用します。

48
ColinD

私は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を実行するたびに、そのキーに一致したすべてのものが戻されます。次に、それらをはがすか、好きなように操作します。

10
bwawok

グアバマルチマップを使用する場合、値はリストではなくコレクションに保存されます

 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);
        }
    }
3
Jana

最小限の例は次のとおりです。

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]
0
Kolibril