如何循环遍历具有 LinkedHashMap 的 ArrayList ?

How to loop through ArrayList that has LinkedHashMap ?

我的 servlet 生成一个数组并将其发送到 jsp。我怎样才能达到以下结果:

如果项目 = "dress", print.out "blue dress, size: medium"

Servlet 部分:

ArrayList<LinkedHashMap<String, String>> listData = new ArrayList<LinkedHashMap<String, String>>();
LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>();

linkedHashMap.put("item", "dress");
linkedHashMap.put("desc", "blue dress");
linkedHashMap.put("size", "medium");
listData.add(linkedHashMap);

linkedHashMap = new LinkedHashMap<String, String>();
linkedHashMap.put("item", "t-shirt");
linkedHashMap.put("desc", "white dress");
linkedHashMap.put("size", "small");
listData.add(linkedHashMap);

request.setAttribute("dataList", listData);

JSP 部分:

if (request.getAttribute("dataList") != null) {
    ArrayList basicList = (ArrayList) request.getAttribute("dataList");

    for (int i=0; i < basicList.size(); i++) {
        System.out.println(basicList.get(i));
    }
}

结果

{item=dress, desc=blue dress, size=medium}
{item=t-shirt, desc=white dress, size=small}

如何实现以下结果:if item = "dress", print "blue dress, size: medium"

如果您想在 JSP 中显示某些内容,请使用适当的技术,这些是 EL 和 JSTL:

<c:forEach items="${dataList}" var="dress">
    <p>${dress['desc']}, size: ${dress['size']} </p>
</c:forEach>

你必须使用 LinkedHashMap 吗?我认为使用 ArrayList 和单独的 class Item with desc 和 size 作为属性会容易得多。这将是 class:

public class Item {
    public String desc;
    public String size;

    public Item (String desc, String size) {
        this.desc = desc;
        this.size = size;
    }
}

我想你也可以使用枚举来表示大小(因为它只会是 "small"、"medium"、"large" 等等)。

您的 Servlet 部分将如下所示:

ArrayList<Item> listData = new ArrayList<Item>();
listData.add(new Item("blue dress", "medium"));
listData.add(new Item("white dress", "small"));
request.setAttribute("dataList", dataList);

你的 JSP 部分是这样的:

if (request.getAttribute("dataList") != null) {
    ArrayList basicList = (ArrayList) request.getAttribute("dataList");

    Item myItem = null;
    for (int i=0; i < basicList.size(); i++) {
        myItem = (Item)basicList.get(i)
        System.out.println(myItem.desc + ", size: " + myItem.size);
    }
}

我没有尝试该代码,但我认为这应该可行。