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

时间:2014-04-10 09:25:33

标签: java map foreach cycle

我有这个代码返回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;
    }
}

问题在于第二种方法,即第二个foreach循环。在pair.getKey()之后,我不确定应该在周期的正确部分放置什么。我想要做的是循环所有条目<Node, Integer>&#34;在地图nodes内,然后将serviceName的每个条目写入另一个地图result

我知道foreach语句的正确部分代表了我想要循环的元素集合,但在这种情况下这对我没什么帮助,除了我编写错误的事实..

任何提示?

2 个答案:

答案 0 :(得分:3)

显然你想要的只是分配给一个局部变量。取代

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

String nodeService = pair.getKey().serviceName;

答案 1 :(得分:0)

HashMap.Entry只是一个tupel,而不是一个可迭代的集合

这意味着您不需要第二个for-each,因为您可以直接通过

来获取Node.serviceName
String serviceName = pair.getKey().serviceName;