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

标签 java jsp map arraylist jstl

我有一张这样的 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/

相关文章:

map - Clojure reducer 库 - 最大折叠

Java - 垃圾回收

java - Tomcat V8 无法在 Eclipse 中启动 - 严重 : A child container failed during start

java - 从JSF页面调用方法疑惑

java - 获取 jsp 响应作为 servlet 中的字符串

java - ModelMap 未将 beans 传递给 jsp

scala - 在scala中提取 map 内容

java - MapStruct - 无法将属性Optional<LocalDate>映射到LocalDate

java.lang.IllegalStateException : Parent was not null, 但此组件不相关

c++ - std::map 线程安全