簡體   English   中英

搜索ArrayList的一個元素並返回包含該元素的所有對象的List

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

這個問題似乎微不足道,但是我找不到正確的方法。

我有一個存儲在服務器中的Map<Node, Integer> ,其中每個節點都由其hostName(字符串)和serviceList(字符串列表)定義,而port顯然是Node使用的端口。 因此,映射的每個條目都為我提供了三個信息:hostName,serviceList和port。

我正在尋找一種方法來搜索元素,該元素包含在已經存儲在地圖中的一個或多個serviceList中,並返回對象“ serviceProviders”的列表。 serviceProvider由hostName和port定義。 所以基本上:

  1. 我有一個映射,其中節點/端口<----完成
  2. 我想查找包含在地圖<----中的一個(或多個)serviceList中的一項服務
  3. 我想返回一個ServiceProvider列表,它基本上是每個Node的主機名和端口的列表,其serviceList包含我正在尋找的服務<----

我以為這樣的事情可能有用,但事實並非如此:

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

哪個是實現此目的的正確方法?

代碼問題是您沒有在添加到列表之前不更新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;
}

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM