2010-06-10 2 views
1

У меня есть HashMap, имеющий четыре значения a, b, c, d и список, имеющий только a я хочу, чтобы увидеть, если HashMap имеет значение a и распечатать его.HashMap и список сравнения

hashmap.get('data') результаты a, b, c, d

список l оказывает a

как я буду печатать только значение a

ответ

1

В карте хранятся пары ключевого значения. Он предлагает метод values() для получения коллекции всех значений с карты.

Так в основном вы должны принять свой собственный список, получить значения из HashMap и проверить для каждого элемента в списке, если это значение карты:

public static Collection<String> contains(Map<String, String> map, List<String> list) { 

    Collection<String> values = map.values(); 
    Set<String> result = new HashSet<String>(); 
    for (String listItem:list) { 
    if (values.contains(listItem) { 
     result.add(listItem); 
    } 
    } 
    return result; // contains a collection of all list items that are values of the map 
} 
0

Java, Map (включая HashMap) имеет Keyset() метод для извлечения ключей. Он возвращает набор ключей. Если вы также конвертируете List в Set (с помощью конструктора HashMap, который принимает список), вы можете использовать метод set's retainAll (...) для получения пересечения значений из ключей карты и списка.

2

Если я правильно понимаю ваш вопрос, вы можете решить, используя values() метод карты, а retainAll метод результата:

HashMap<Integer, String> somePairs = new HashMap<Integer, String>(); 
somePairs.put(1, "a"); 
somePairs.put(2, "b"); 
somePairs.put(3, "c"); 
somePairs.put(4, "d"); 

List<String> list = Arrays.asList("a"); 

// Start off with all values in the map: 
List<String> result = new ArrayList<String>(somePairs.values()); 

// Keep only those values present in list 
result.retainAll(list); 

От the API documentation on retainAll:

Сохраняет только элементы в этой коллекции, которые содержатся в указанной коллекции (дополнительная операция). Другими словами, удаляет из этой коллекции все ее элементы, которые не содержатся в указанной коллекции.

0

По сути вы хотите объединение значений на карте hashmap и в списке l. Это должно сделать трюк:

CollectionUtils.union(hashmap.values(), l) 

Это требует Apache Commons Collections библиотеки на пути к классам, который имеет много полезных функций для коллекций.

Смежные вопросы