按键迭代Map

时间:2015-11-30 09:20:12

标签: java

我尝试通过键值迭代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;
}

感谢。

2 个答案:

答案 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,没有别的办法。