搜索ArrayList的一个元素,并返回包含该元素的所有对象的List

时间:2014-05-20 10:20:38

标签: java loops search arraylist map

问题似乎微不足道,但我找不到如何正确地做到这一点。

我在服务器中记忆Map<Node, Integer>,其中每个Node由其hostName(一个String)及其serviceList(一个String列表)定义,port显然是Node使用的端口。所以地图的每个条目都给我三个信息:hostName,serviceList和port。

我正在寻找一种搜索元素的方法,该元素包含在已经存储到地图中的一个或多个serviceLists中,并返回一个对象列表&#34; serviceProviders&#34;。 serviceProvider由hostName和port定义。所以基本上:

  1. 我有一个带有条目Node / Port&lt; ---- done
  2. 的Map
  3. 我想查找包含在地图中的一个(或多个)服务列表中的服务&lt; ---- to do
  4. 我想返回一个ServiceProvider列表,它基本上是每个Node的hostName和port的列表,其serviceList包含我正在寻找的服务&lt; ---- to do
  5. 我认为这样的事情可能有用,但事实并非如此:

    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;
    }
    

    这是实现这个的正确方法吗?

1 个答案:

答案 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;
}

希望这有帮助。