繁体   English   中英

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

[英]How to iterate an ArrayList inside a HashMap using JSTL?

我有这样的地图

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

现在,我必须迭代此Map,然后迭代该地图内的ArrayList。 如何使用JSTL做到这一点?

您可以使用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>

对于地图,每次迭代时var都会为您提供一个Map.Entry对象,该对象又具有getKey()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();
}

也可以看看:

你尝试过这样的事情吗?

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

您尚未关闭c标签。尝试一下

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

如果知道密钥,也可以只对map.value自身进行循环。

<c:forEach var="value" items="${myMap[myObject.someInteger]}">
    ${value}
</c:forEach>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM