【发布时间】:2011-01-08 05:19:09
【问题描述】:
我有一张这样的地图,
Map<Integer,ArrayList<Object>> myMap = new LinkedHashMap<Integer,ArrayList<Object>>();
现在我必须迭代这个 Map,然后是 Map 中的 ArrayList。如何使用 JSTL 做到这一点?
【问题讨论】:
标签: java jsp map arraylist jstl
我有一张这样的地图,
Map<Integer,ArrayList<Object>> myMap = new LinkedHashMap<Integer,ArrayList<Object>>();
现在我必须迭代这个 Map,然后是 Map 中的 ArrayList。如何使用 JSTL 做到这一点?
【问题讨论】:
标签: java jsp 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();
}
【讨论】:
${loop.index}、${loop.first} 和 ${loop.last} 在这里最有用。
如果你知道密钥,你也可以只循环 map.value 的自身
<c:forEach var="value" items="${myMap[myObject.someInteger]}">
${value}
</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>
【讨论】:
你尝试过这样的事情吗?
<c:forEach var='item' items='${map}'>
<c:forEach var='arrayItem' items='${item.value}' />
...
</c:forEach>
</c:forEach>
【讨论】:
${item.key}。