Java: преобразование значений HashMap в Set

еще один вопрос о HashMap в Java:

у меня есть следующие

Map<String, Set<Integer>> myWordDict = new HashMap<String, Set<Integer>>();

после хранения данных в переменную myWordDict, Я хочу перебрать HashMapValues и добавить каждое значение в новую переменную Set?

когда я пытаюсь сделать Set<Integer> newVariable = myWordDict.entrySet(), похоже, тип данных несовместим.

так что мой вопрос по существу:

как преобразовать значения HashMap или entrySet () в Set ?

спасибо

9 ответов


ваша декларация должна быть ниже. Он преобразует ваши значения карты в Collection

  Collection<Set<Integer>> newVariable = myWordDict.values();

попробуй:

Set<Integer> newVariable = mywordDict.keySet();

или

Set<Integer> newVariable = new HashSet<Integer>(myWordDict.values());

Что значит entrySet возвращает?

public Set<Map.Entry<K,V>> entrySet()

возвращает представление набора отображений, содержащихся в этой карте. Набор поддерживается картой, поэтому изменения на карте отражаются в наборе, и наоборот.

если вы хотите перебирать myWordDict хэш-карту тогда просто

for(Map.Entry<String, Set<Integer>> entry : myWordDict.entrySet())
{
   Set<Integer> newVariable = entry.getValue();
}

ссылки по теме


Если вам нужны все значения как Set of Integers, а не Set of Set, тогда вы могли бы сделать что-то подобное

Set<Integer> newVariable = new HashSet<Integer>();
for (Set<Integer> set : myWordDict.values()) {
    newVariable.addAll(set);
}

или если вы хотите их как Set of Set, вам нужно сделать что-то вроде этого

Set<Set<Integer>> newVariable = new HashSet<Set<Integer>>();
newVariable.addAll(myWordDict.values());

использовать myWordDict.values(), а не myWordDict.entrySet(). values-это набор значений values, тогда как entrySet - это набор его отображений (это набор java.утиль.карта.Объекты ввода, каждый из которых описывает ключ и значение).


предполагая, что вы хотите добавить все значения из наборов на карте, ваш подход к этому-использовать методы addall способ:

Set<Integer> newVariable = new HashSet<Integer>();
for (Set<Integer> set : myWordDict.values()) {
    newVariable.addAll(set);
}

Map<Integer,String>   map1 = new HashMap<Integer,String>();

map1.put(1, "Rakesh");
map1.put(2, "Amal");
map1.put(3, "Nithish");

Set<Entry<Integer,String>> set1 = map1.entrySet();

Итак, я придумал итератор для итерации через набор значений

у меня есть эта структура данных

Map<String, Set<Integer>> myWordDict = new HashMap<String, Set<Integer>>();

Я создал

Iterator mapIterator = myWordDict.entrySet().iterator();

затем просто используйте цикл while () для добавления отдельного значения в новую переменную Set. Я не уверен, что это самый эффективный способ, но это работает для моих потребностей.`


flatMap поможет вам:

myWordDict.values().stream().flatMap(Set::stream).collect(Collectors.toSet());