当前位置: 首页 > 面试题库 >

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

东方骏
2023-03-14
问题内容

我有这样的地图

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}实际上是a 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();
}


 类似资料:
  • 我正在尝试迭代作为参数传递给jrxml的<code>HashMap</code>的值,在<code>HashMap</code>中,这些值作为<code>List</code>传递。 例 我如何在jasper report Jr XML中迭代这些< code>List?

  • 问题内容: 我正在寻找仅使用JSTL设置HashMap的键值对。这可能吗? 我知道如何检索键值对,但是还没有找到设置它们的方法。 任何帮助,将不胜感激。 使用JSTL检索HashMap键/值对的示例: 问题答案: 您可以使用。

  • 我想单独打印ArrayList中的每个值,即{1=[A,B,C,D],2=[E,F,G,H]} 如果用户输入2(即键),则输出应为E F G H

  • 我正在尝试迭代一个列表,并尝试将该值打印为: 但是,只打印列表的大小,而不是在JSTL中定义的。有人帮忙吗?我想打印对象的所有属性。

  • 简而言之:在我的JSP中,我需要使用C:Foreach jstl迭代一个自定义bean类列表,比如list,MyClass有键和值变量,以及这些变量的getter和setter 细节:类似这样的内容: 在Java代码中,我有: List pairlist=new ArrayList();//MyClass是一个简单的bean类,具有变量“key”和“value”,以及相同的getter和sette

  • 这是hashmap,当我尝试迭代它并打印值时,例如,我从随机位置获得值。为什么不显示0.92,0.91,0.90。。。 迭代后的结果: 0.5 0.32 0.68 0.18 0.82 0.49 0.51 0.31 0.69 0.48 0.52 0.08 0.92 0.17 0.83 0.47 0.3 0.7 0.53 0.16 0.84 0.46 0.54 0.29 0.71 0.45 0.55