又一个",;只能迭代java.lang.Iterable的数组或实例;问题

又一个",;只能迭代java.lang.Iterable的数组或实例;问题,java,map,foreach,cycle,Java,Map,Foreach,Cycle,我有一个返回java.lang.iterable错误的代码。我知道我在哪里出错,但我不知道如何修复它 代码如下: public class ManagementServiceHandler implements ManagementService.Iface { private Map<Node, Integer> nodes; private int portCount = 1025; public ManagementServiceHandler() {

我有一个返回java.lang.iterable错误的代码。我知道我在哪里出错,但我不知道如何修复它

代码如下:

public class ManagementServiceHandler implements ManagementService.Iface {
    private Map<Node, Integer> nodes;
    private int portCount = 1025;

    public ManagementServiceHandler() {
      nodes = new HashMap<Node, Integer>();
    }

    //register node
    public int RegisterNode(Node hostAndService) throws TException {
        portCount++;
        nodes.put(hostAndService, portCount);

        return portCount;            
    }

    //get service
    public Map<String, Integer> getProvidersForServices(String svcName, int port) throws TException {
        Map<String, Integer> result = new HashMap<>();

        for (Map.Entry<Node, Integer> pair : nodes.entrySet()) {
            for (String nodeService : pair.getKey().serviceName) {
                if (nodeService.equals(svcName)) {
                    result.put(pair.getKey().serviceName, pair.getValue());
                    break;
                }
            }
        }

        return result;
    }
}
公共类ManagementServiceHandler实现ManagementService.Iface{
私有映射节点;
私有int端口计数=1025;
公共管理服务处理程序(){
nodes=newhashmap();
}
//注册节点
public int RegisterNode(节点hostAndService)引发异常{
portCount++;
放置(主机和服务,端口计数);
返回端口计数;
}
//得到服务
公共映射getProvidersForServices(字符串svcName,int-port)引发异常{
映射结果=新的HashMap();
for(Map.Entry对:nodes.entrySet()){
for(字符串nodeService:pair.getKey().serviceName){
if(nodeService.equals(svcName)){
put(pair.getKey().serviceName,pair.getValue());
打破
}
}
}
返回结果;
}
}
问题在于第二种方法,即每个周期的第二个方法。我不确定在
pair.getKey()
之后,在循环的正确部分应该放什么。我要做的是循环Map
节点中的所有条目,然后将serviceName的每个条目写入另一个Map
结果中

我知道foreach语句的正确部分表示我要循环使用的元素集合,但在这种情况下,这对我没有多大帮助,除了我编码错误之外


有什么提示吗?

显然,您只想赋值给一个局部变量。替换

for (String nodeService : pair.getKey().serviceName)


Entry只是一个元组,而不是一个iterable集合

这意味着您不需要每一个都使用第二个,因为您可以通过直接访问Node.serviceName

String serviceName = pair.getKey().serviceName;

多亏了你和尼莫的回答,问题才得以解决。
String serviceName = pair.getKey().serviceName;