我有一个类似于这样的地图:
Map<Integer,ArrayList<Object>> myMap = new LinkedHashMap<Integer,ArrayList<Object>>();
现在我需要迭代这个Map,然后迭代Map内部的ArrayList。如何使用JSTL实现此操作?
我有一个类似于这样的地图:
Map<Integer,ArrayList<Object>> myMap = new LinkedHashMap<Integer,ArrayList<Object>>();
现在我需要迭代这个Map,然后迭代Map内部的ArrayList。如何使用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>
${item.key}
。 - Powerlord <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>
${loop.index}
、${loop.first}
和${loop.last}
在这里是最有用的。 - BalusC