我尝试通过键值迭代HashMap时出现以下错误:
Can only iterate over an array or an instance of java.lang.Iterable
我找到了一些答案,但那些使用.entrySet()
,我需要使用键值进行迭代。到目前为止,这是我的代码:
for (ProtocolNode pendingNode : this.getPendingNodes().get(ExtractNumber(jid))){
// Do stuff (ExractNumber is a String)
}
功能:
public HashMap<String, ProtocolNode> getPendingNodes()
{
return this.pending_nodes;
}
感谢。
答案 0 :(得分:0)
如果你看一下javadoc中的方法。
https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
您将看到它返回一个值,您不能迭代一个值。 您只是访问一个项目,即与“jid”关联的项目。
如果您看一下这个答案:Iterate through a HashMap,您可以看到如何迭代一个hashmap。你只需要使用'getPendingNodes()'来获取HashMap。
答案 1 :(得分:0)
迭代地图,您需要保留Collection实例。 因此,请按以下方式更改地图:
public HashMap<String, List<ProtocolNode>> getPendingNodes()
{
return this.pending_nodes;
}
或使用以下方法修复您自己的代码:
Map<String, ProtocolNode> testMap = new HashMap<String, ProtocolNode>();
for( Entry<String, ProtocolNode> entry : testMap.entrySet() ){
if( entry.getKey().equals( "MYKEY" ) ){
System.out.println( entry.getValue() );
}
}
你必须使用entryset,没有别的办法。