35


11

JSTLを使用してHashMap内でArrayListを反復する方法は?

このような地図があります

Map> myMap = new LinkedHashMap>();

次に、このMapを反復処理してから、Map内のArrayListを反復処理する必要があります。 JSTLを使用してこれを行うにはどうすればよいですか?

4 回答


71


JSTL http://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/c/forEach.html [``]を使用できます。配列、コレクション、マップを反復処理するタグ。

配列とコレクションの場合、 `var`を繰り返すたびに、現在反復されているアイテムだけがすぐに得られます。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    Item = ${item}

マップの場合、各反復で var`はhttp://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html [ Map.Entry`]オブジェクトを提供しますこれには、 `getKey()`および `getValue()`メソッドがあります。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    Key = ${entry.key}, value = ${entry.value}

あなたの特定のケースでは、 `$ {entry.value}`は実際には `List`なので、同様にそれを繰り返す必要があります:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    Key = ${entry.key}, values =

        ${item} ${!loop.last ? ', ' : ''}

`varStatus`は便宜のためだけにあります;)

ここで何が起こっているのかをよりよく理解するために、簡単なJava翻訳を示します。

for (Entry> entry : map.entrySet()) {
    out.print("Key = " + entry.getKey() + ", values = ");
    for (Iterator iter = entry.getValue().iterator(); iter.hasNext();) {
        Object item = iter.next();
        out.print(item + (iter.hasNext() ? ", " : ""));
    }
    out.println();
}


6


あなたはこのようなことを試しましたか?

      ...


5


cタグを閉じていません。これを試してください

        Key = ${entry.key}, values =

            ${item} ${!loop.last ? ', ' : ''}


0


キーを知っていれば、map.valueの自己だけをループすることもできます。

    ${value}