我有一张这样的 map ,
Map<Integer,ArrayList<Object>> myMap = new LinkedHashMap<Integer,ArrayList<Object>>();
现在我必须迭代这个 Map,然后是 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>
对于 map ,每次迭代 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();
}
另见:
关于java - 如何使用 JSTL 在 HashMap 中迭代 ArrayList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2117557/