问题似乎微不足道,但我找不到如何正确地做到这一点。
我在服务器中记忆Map<Node, Integer>
,其中每个Node由其hostName(一个String)及其serviceList(一个String列表)定义,port显然是Node使用的端口。所以地图的每个条目都给我三个信息:hostName,serviceList和port。
我正在寻找一种搜索元素的方法,该元素包含在已经存储到地图中的一个或多个serviceLists中,并返回一个对象列表&#34; serviceProviders&#34;。 serviceProvider由hostName和port定义。所以基本上:
我认为这样的事情可能有用,但事实并非如此:
public List<ServiceProvider> getProvidersForService(String serviceName) throws TException {
ServiceProvider serviceProvider = new ServiceProvider();
List<ServiceProvider> result = new ArrayList<>();
for(Map.Entry<Node, Integer> pair : nodePorts.entrySet()) {
//problems start here
List<String> nodeService = pair.getKey().serviceList;
for(String s : nodeService) {
if(s.contains(serviceName))
result.add(serviceProvider);
break;
}
}
return result;
}
这是实现这个的正确方法吗?
答案 0 :(得分:0)
代码问题是您在添加到列表之前没有更新serviceProvider
对象,目前您正在添加空ServiceProvider
个对象:
public List<ServiceProvider> getProvidersForService(String serviceName) throws TException {
ServiceProvider serviceProvider = new ServiceProvider();
List<ServiceProvider> result = new ArrayList<>();
for(Map.Entry<Node, Integer> pair : nodePorts.entrySet()) {
//problems start here
List<String> nodeService = pair.getKey().serviceList;
for(String s : nodeService) {
if(s.contains(serviceName))
// **update service provide before adding here by putting host/port**
result.add(serviceProvider);
break;
}
}
return result;
}
希望这有帮助。