10

关于 Java 中 HashMap<> 的另一个问题:

我有以下

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

将数据存储到变量后myWordDict,我想遍历 HashMapValues,并将每个值添加到新的 Set 变量中?

当我尝试这样做Set<Integer> newVariable = myWordDict.entrySet()时,似乎数据类型不兼容。

所以我的问题本质上是:

如何将 HashMap 值或 entrySet() 转换为 Set ?

谢谢

4

9 回答 9

21

尝试:

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

或者

Set<Integer> newVariable = new HashSet<Integer>(myWordDict.values());
于 2013-11-12T06:23:38.590 回答
11

您的声明应如下所示。它将您的地图值转换为Collection

  Collection<Set<Integer>> newVariable = myWordDict.values();
于 2013-11-12T06:18:34.907 回答
5

entrySet回报是什么?

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

返回此映射中包含的映射的 Set 视图。集合由地图支持,因此对地图的更改会反映在集合中,反之亦然。

如果您想遍历myWordDict哈希图,那么只需

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

相关链接

于 2013-11-12T06:21:49.590 回答
3

如果您需要将所有值作为 aSetIntegers不是 a Setof Set,那么您可以执行以下操作

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

或者,如果您希望它们成为Setof Set,则需要执行以下操作

Set<Set<Integer>> newVariable = new HashSet<Set<Integer>>();
newVariable.addAll(myWordDict.values());
于 2013-11-12T06:21:37.673 回答
2

flatMap 将帮助您:

myWordDict.values().stream().flatMap(Set::stream).collect(Collectors.toSet());
于 2017-10-27T07:34:07.563 回答
1

使用myWordDict.values(),不是myWordDict.entrySet()。values 是一组映射values,而是entrySet一组映射(它是一组 java.util.map.Entry 对象,每个对象描述一个键和一个值)。

于 2013-11-12T06:17:34.207 回答
1
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();
于 2013-11-12T06:21:39.720 回答
1

假设您想从地图中的集合中添加所有值,您的方法是使用addAll方法:

Set<Integer> newVariable = new HashSet<Integer>();
for (Set<Integer> set : myWordDict.values()) {
    newVariable.addAll(set);
}
于 2013-11-12T06:24:02.413 回答
0

所以,我想出了一个迭代器来遍历值 Set

我有这个数据结构

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

我建立

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

然后只需使用 while() 循环将单个值添加到新的 Set 变量。我不确定这是最有效的方法,但它可以满足我的需求。`

于 2013-11-12T06:25:55.220 回答