又一个",;只能迭代java.lang.Iterable的数组或实例;问题
我有一个返回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() {
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;