我有一个TreeMap<Token, ArrayList<Token>>
,我想迭代地图,直到满足要求的特定键。我知道以下内容适用于获取地图的值:
Collection c = bigrams.values();
Iterator itr = c.iterator();
while (itr.hasNext()){
System.out.println(itr.next());
但是,我希望能够使用链接到迭代器的键遍历映射,并根据其对键检查每个值。由于bigrams.values()
检索了两个元素的值,我怎么能改变它来检索键而不是值?
你的问题有点神秘,但如果你想获得密钥,你可以简单地使用keySet()
方法:
Collection c = test.keySet();
如果要根据键遍历地图,可以执行以下操作:
for (Token key: bigrams.keySet()) {
ArrayList<Token> list = bigrams.get(key);
// do with the list what you want to do with it
}
你应该使用Map.keySet()
或Map.entrySet()
:
Map.keySet()
返回一个包含地图所有键的集合。然后,您可以使用Map.get()
获取给定键的值:
for (Token key: bigrams.keySet()) {
List<Token> list = bigrams.get(key);
System.out.println(key + ": " + list);
}
Map.entrySet()
在地图中返回一组所有对,因此不需要使用Map.get()
:
for (Map.Entry<Token, List<Token>> entry : bigrams.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
最后,您还可以使用Java Stream API。您还可以使用它来轻松过滤内容。例如,要在其值列表中查找包含给定标记的所有标记:
bigrams.entrySet().stream()
.filter(e -> e.getValue().contains(tokenToFind))
.forEach(e -> System.out.println(e.getKey() + ": " + e.getValue()));