Java Hashmap - Получение / получение «ключа» путем передачи «значения» в качестве параметра в методе - PullRequest
0 голосов
/ 05 августа 2020

И ключ, и значение вводятся пользователем. Затем значение передается в переменную as для получения соответствующего ключа для значения.

Мой вывод возвращает NULL. Пожалуйста, помогите мне получить ключ, передав значение.

public class DomainBO {

    private Map<String,String> domainMap;
        
    public Map<String,String> getDomainMap() {
        return domainMap;
    }

    public void setDomainMap(Map<String,String> domainMap) {
        this.domainMap = domainMap;
    }

    //This method should add the domainName as key and their ipAddress as value into a Map
    public void addDNSDetails  (String domainName,String ipAddress){    
        domainMap.put(domainName, ipAddress);       
    }
    
    /*
     * This method should return the domain name for the specific ipAddress which is passed as the argument. 
     * For example: If the map contains the key and value as:
     * www.yahoo.net    205.16.214.15
       www.gmail.net    195.116.254.154
       www.tech.net     15.160.204.105
        
        if the ipAddress is 195.116.254.154 the output should be www.gmail.net
     */
    public String findDomainName(String ipAddress) 
    {
        String domain = null;
        for (Map.Entry<String, String> entry : domainMap.entrySet()) {
                String k = entry.getKey();
                String v = ipAddress;
                
                if (k.equals(v)) {
                    domain = k;                 
                }
         }     
         return domain;                 
    }
}

1 Ответ

0 голосов
/ 05 августа 2020

Фактически вы сравниваете ключ с вашим ipAdress, это то, что вы хотите, скорее это:

public String findDomainName(String ipAddress) {
    String domain = null;
    for (Map.Entry<String, String> entry : domainMap.entrySet()) {
            String k = entry.getKey();
            String v = entry.getValue(); // <----  
            
            if (ipAddress.equals(v)) {
                domain = k;                 
            }
     }     
     return domain;                 
}

Можно сократить в

public String findDomainName(String ipAddress) {
    for (Map.Entry<String, String> entry : domainMap.entrySet()) 
            if (ipAddress.equals(entry.getValue())) 
                return entry.getKey();    
     return null; 
}

Использование потоков

public String findDomainName(String ipAddress) {
    return domainMap.entrySet().stream().filter(e -> ipAddress.equals(e.getValue()))
                    .map(Map.Entry::getKey).findFirst().orElse(null);
}

кстати: первый код возвращает последнее совпадение, второй код возвращает первое совпадение

...