2017-01-25 4 views
4

Есть ли встроенный метод Java, который принимает несколько карт в качестве аргументов и возвращает набор всех ключей на этих картах?Возвращает набор всех ключей в коллекции карт

Что-то вроде

public static Set<String> getKeys(Map<String, ?> ... arg2){ 

    Set<String> result = new HashSet<>();   
    for (Map<String, ?> map : arg2) { 
     for (Map.Entry<String, ?> entry : map.entrySet()) { 
      String key = entry.getKey(); 
      result.add(key); 
     }    
    } 
    return result; 
} 
+2

Отсутствует, что я знаю. Если бы это было, это было бы идентично вашему коду ;-) – Bathsheba

+6

Нет, что я знаю и, конечно, не в стандартных библиотеках. Подход, который вы используете, - это путь, хотя я бы предложил вместо него использовать 'keySet()', то есть 'result.addAll (map.keySet())' - таким образом вам не понадобится этот внутренний цикл, хотя это, скорее всего, не будет иметь разницы в производительности. – Thomas

ответ

6

Не то, что я знаю, нет. Но давайте немного повеселимся с потоками Java 8, не так ли?

private Set<String> keys(Map<String, ?>... maps) { 
    return Arrays.stream(maps).flatMap((map) -> map.keySet().stream()).collect(Collectors.toSet()); 
} 
3

Вы можете использовать Java 8 и потоки.

public static Set<String> getKeys(Map<String, ?> ... arg2){ 
    return Arrays.stream(arg2) 
      .map(Map::keySet) 
      .flatMap(Collection::stream) 
      .collect(Collectors.toSet()); 
}