简体   繁体   English

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

[英]Search for one element of an ArrayList and return a List of all objects that contains that element

The question seems trivial, but i can't find how to do it properly. 这个问题似乎微不足道,但是我找不到正确的方法。

I have a Map<Node, Integer> memorized in a server, where each Node is defined by its hostName (a String) and its serviceList (a List of String), and port is obviously the port used by the Node. 我有一个存储在服务器中的Map<Node, Integer> ,其中每个节点都由其hostName(字符串)和serviceList(字符串列表)定义,而port显然是Node使用的端口。 So every entry of the map gives me three informations: hostName, serviceList and port. 因此,映射的每个条目都为我提供了三个信息:hostName,serviceList和port。

I'm looing for a way to search for an element, that is contained into one or more serviceLists already memorized into the map, and return a list of objects "serviceProviders". 我正在寻找一种方法来搜索元素,该元素包含在已经存储在地图中的一个或多个serviceList中,并返回对象“ serviceProviders”的列表。 A serviceProvider is defined by hostName and port. serviceProvider由hostName和port定义。 So basically: 所以基本上:

  1. I have a Map with entries Node/Port <---- done 我有一个映射,其中节点/端口<----完成
  2. I want to look for a service contained into one (or more) serviceLists present in the map <---- to do 我想查找包含在地图<----中的一个(或多个)serviceList中的一项服务
  3. I want to return a List of ServiceProvider, that is basically a list of hostName and port of each Node whose serviceList contains the service i'm looking for <---- to do 我想返回一个ServiceProvider列表,它基本上是每个Node的主机名和端口的列表,其serviceList包含我正在寻找的服务<----

I thought something like this might have worked, but it's not: 我以为这样的事情可能有用,但事实并非如此:

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

which is the correct way to implement this? 哪个是实现此目的的正确方法?

Problem with your code is you are not updating your serviceProvider object before adding to the list, currently you are adding empty ServiceProvider objects: 代码问题是您没有在添加到列表之前不更新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;
}

Hope this helps. 希望这可以帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM