我有这个代码返回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语句的正确部分代表了我想要循环的元素集合,但在这种情况下这对我没什么帮助,除了我编写错误的事实..
任何提示?
答案 0 :(得分:3)
显然你想要的只是分配给一个局部变量。取代
for (String nodeService : pair.getKey().serviceName)
与
String nodeService = pair.getKey().serviceName;
答案 1 :(得分:0)
HashMap.Entry只是一个tupel,而不是一个可迭代的集合
这意味着您不需要第二个for-each,因为您可以直接通过
来获取Node.serviceNameString serviceName = pair.getKey().serviceName;