如何在hashmap中迭代hashset ?



我试图通过包含8个条目的哈希映射进行迭代。然而,其中一个条目是一个包含2个对象的哈希集"气球"。我想把它添加到数组列表中这样我就可以在for循环中遍历它/

下面代码的第一部分工作,我循环遍历hashmap并查找我需要的键,它是'balloon'。我需要帮助添加哈希集到数组列表。我得到一个铸造错误时,使用收集器。列表和流

//This is the hashmap I am looping through to find the balloon key
Map<String, Object> types = System.getPartyItems();
for (Map.Entry<String, Object> entry : types.entrySet()) {
if (StringUtils.contains(entry.getKey().toString(), "balloon")) {
//This is where I need to add the balloon hashset to a list to access the entries and values from within.
List<PartyItem> myPartyList = new ArrayList<>();
myPartyList.add (hash set of balloon objects)

我是否需要在将哈希集设置为列表之前将其分配给变量?我尝试过的任何东西都有一个类型转换错误,例如"类java.util.stream"。引用管道$Head不能强制转换为类java.util.ArrayList"感谢任何帮助。由于

测试一个值是否为Set,如果是,将所有项添加到列表中。

if (StringUtils.contains(entry.getKey().toString(), "balloon")
&& entry.getValue() instanceof Set) {
myPartyList.addAll((Set)entry.getValue());
}

可以这样迭代:

for(String key: Map.keySet()){
if(StringUtils.contains(key, "balloon")){
Iterator<String> it = hashMap.get("balloon").iterator();
while(it.hasNext()){
// your code here
}
}
}

不是遍历条目,而是遍历键,当找到气球时获取哈希集来遍历它。

for(String key: types.keySet()){
if(StringUtils.contains(key, "balloon")){
for(Object object: types.get(key)){
//do what you need with object
}
}
}
  • 编辑后应该是这样的
for(String key: types.keySet()){
if(StringUtils.contains(key, "balloon")){
ArrayList<Set<PartyItem>> myList = new ArrayList();
myList.add(types.get(key));
}
}

通常你的hashmap结构为<key,>通过相应的键来访问值。但它们必须完全匹配。在您的示例中,您的hashmap看起来像这样:

Map<String, Object> partyItems = myPartyList.getPartyItems();
// or maybe even
Map<String, PartyItem> partyItems = myPartyList.getPartyItems();

获取值就像:

Object partyItem = partyItems.get("baloon");

如果您不确定paryItems是否包含键baloon的值,您可以先检查:

if (partyItems.contains("baloon")) {
Object partyItem = partyItems.get("baloon");
}

如果您正在寻找匹配baloon的键的一部分:

List<PartyItem> myFilteredPartyItems = partyItems.entrySet().stream()
.filter(e -> e.getKey().contains("baloon"))
.collect(Collectors.toList()))

这被称为面向流编程(看一下Java流API),如果你至少运行Java 8,你可以使用这些。它所做的是将List的条目转换为流,然后删除键中不包含baloon的所有内容,并将未被删除的结果流转换回列表。

在这里你还可以找到一个关于如何在Java中使用流的非常翔实的教程。