gpt4 book ai didi

java - 最后输入的 HashMap 键是为 map 中的每个元素设置的

转载 作者:行者123 更新时间:2023-11-30 02:13:49 24 4
gpt4 key购买 nike

我正在使用 XMLPullParser 将我的 XML 解析为 HashMap 。我的 XML 是一个“菜单”,hashmap 的键是类别,值是菜单项的 ArrayList。但是,在 HashMap 中,最后输入的键是 HashMap 中所有项目的键,而不仅仅是最后一个元素。为什么是这样?这是我的代码:

   public HashMap<String, ArrayList<String>> getMenu() throws IOException,
XmlPullParserException {

XmlPullParser xpp = appContext.getResources().getXml(R.xml.menu);

HashMap<String, ArrayList<String>> menuItems = new HashMap<String, ArrayList<String>>();
ArrayList<String> items = new ArrayList<String>();
String catName = null;
while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) {
if (xpp.getEventType() == XmlPullParser.START_TAG) {
if (xpp.getName().equals("categoryname")) {
catName = xpp.nextText();
menuItems = new HashMap<String, ArrayList<String>>();
} else if (xpp.getName().equals("item")) {
items.add(xpp.nextText());
}
} else if (xpp.getEventType() == XmlPullParser.END_TAG) {
if (xpp.getName().equals("category")) {
System.out.println("Adding Category: " + catName);
menuItems.put(catName, items);
catName = new String();
}
}

xpp.next();
}

for (Map.Entry<String, ArrayList<String>> entry : menuItems.entrySet()) {
String key = entry.getKey();
ArrayList<String> value = entry.getValue();
for(String str : value) {
System.out.println("Category: " + key + " Item: " + str);
}
}

return menuItems;
}

我正在解析的 XML 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<restaurant>
<restaurantname>Arbys</restaurantname>
<category>
<categoryname>Roast Beef Sanwiches</categoryname>
<item>Sandwich</item>
<item>Melt</item>
</category>
<category>
<categoryname>Beverages</categoryname>
<item>Brewed Iced Tea</item>
</category>
<category>
<categoryname>Breakfast</categoryname>
<item>Bacon, Egg &amp; Cheese Biscuit</item>
<item>Chicken Biscuit</item>
</category>
<category>
<categoryname>Chicken</categoryname>
<item>Crispy Chicken Sandwich</item>
<item>Prime-Cut Chicken Tenders</item>
</category>
</restaurant>

我的日志是这样的:

System.out(7153): Adding Category: Roast Beef Sanwiches
System.out(7153): Adding Category: Beverages
System.out(7153): Adding Category: Breakfast
System.out(7153): Adding Category: Chicken
System.out(6523): Category: Chicken Item: Sandwich
System.out(6523): Category: Chicken Item: Melt
System.out(6523): Category: Chicken Item: Brewed Iced Tea
System.out(6523): Category: Chicken Item: Bacon, Egg & Cheese Biscuit
System.out(6523): Category: Chicken Item: Chicken Biscuit
System.out(6523): Category: Chicken Item: Crispy Chicken Sandwich
System.out(6523): Category: Chicken Item: Prime-Cut Chicken Tenders

因此,“Chicken”是所有项目的类别,但是,它应该只是最后 2 项的类别。有人知道怎么回事吗?谢谢

最佳答案

这是因为两件事:每次找到名为 categoryname 的标签时,循环都会为 menuitems 创建新对象,并且所有项目都会不断添加到同一个标签中项目 列表。所以最后你有一个 menuitems map ,它是在找到的最后一个类别中创建的,并且它正在添加所有项目,因为它们都被添加到同一个列表中。

关于java - 最后输入的 HashMap 键是为 map 中的每个元素设置的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29711201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com