How to compare two Hashmaps

Refresh

November 2018

Views

576 time

4

I have two Hashmaps filled here:

Properties properties = new Properties();
try {
    properties.load(openFileInput("xmlfilesnames.xml"));
} catch (IOException e) {
    e.printStackTrace();
}
for (String key : properties.stringPropertyNames()) {
    xmlFileMap.put(key, properties.get(key).toString());
}

try {
    properties.load(openFileInput("comparexml.xml"));
} catch (IOException e) {
    e.printStackTrace();
}
for (String key : properties.stringPropertyNames()) {
    compareMap.put(key, properties.get(key).toString());
}

Declaration:

public Map<String,String> compareMap = new HashMap<>();
public Map<String, String> xmlFileMap = new HashMap<>();

they look like:

enter image description here

How can I check if the job_id changed of maybe if it's null? Sometimes the job_id doesn't really exists. So the job_id is missing in them.

And Sometimes in compareMap are more then one job_id

How can I compare just the job_id's and get a boolean value when compared?

1 answers

3

Кажется, что вы хотите, чтобы найти ключ карты на основе определенного шаблона. Это может быть сделано путем перебора всех ключей:

private static String PREFIX = "<job_id>";
private static String SUFFIX = "</job_id>";

public static String extractJobId(Map<String, ?> map) {
    for(String key : map.keySet()) {
        if(key.startsWith(PREFIX) && key.endsWith(SUFFIX))
            return key.substring(PREFIX.length(), key.length()-SUFFIX.length());
    }
    // no job_id found
    return null;
}

Если вы можете иметь несколько ключей JOB_ID и хотите проверить, все ли они одинаковы, вы можете создать промежуточный набор вместо этого:

public static Set<String> extractJobIds(Map<String, ?> map) {
    Set<String> result = new HashSet<>();
    for(String key : map.keySet()) {
        if(key.startsWith(PREFIX) && key.endsWith(SUFFIX))
            result.add(key.substring(PREFIX.length(), key.length()-SUFFIX.length()));
    }
    return result;
}

Теперь вы можете использовать этот метод для сравнения job_id различных карт:

if(Objects.equals(extractJobIds(xmlFileMap), extractJobIds(compareMap))) {
    // ...
}