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. Я не уверен, что это самый эффективный способ, но это работает для моих потребностей.`