如何使用JSTL在HashMap中迭代ArrayList?

2022-09-01 06:29:49

我有一张这样的地图,

Map<Integer,ArrayList<Object>> myMap = new LinkedHashMap<Integer,ArrayList<Object>>();

现在,我必须迭代此映射,然后迭代映射内的 ArrayList。如何使用 JSTL 执行此操作?


答案 1

您可以使用 JSTL <c:forEach> 标记来迭代数组、集合和映射。

对于数组和集合,每次迭代都会立即为您提供当前迭代的项。var

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

<c:forEach items="${collectionOrArray}" var="item">
    Item = ${item}<br>
</c:forEach>

对于映射,每次迭代都会给你一个Map.Entry对象,该对象又具有和方法。vargetKey()getValue()

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

<c:forEach items="${map}" var="entry">
    Key = ${entry.key}, value = ${entry.value}<br>
</c:forEach>

在您的特定情况下,实际上是一个 ,因此您还需要迭代它:${entry.value}List

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

<c:forEach items="${map}" var="entry">
    Key = ${entry.key}, values = 
    <c:forEach items="${entry.value}" var="item" varStatus="loop">
        ${item} ${!loop.last ? ', ' : ''}
    </c:forEach><br>
</c:forEach>

那里只是为了方便;)varStatus

为了更好地理解这里发生了什么,这里有一个简单的Java翻译:

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

另请参阅:


答案 2

你试过这样的东西吗?

<c:forEach var='item' items='${map}'>
    <c:forEach var='arrayItem' items='${item.value}' />
      ...
    </c:forEach>
</c:forEach>