java - 如何创建一个集合和迭代器,它会遍历某些值直到达到一个值?
问题描述
我有一个TreeMap<Token, ArrayList<Token>>
并且我想遍历地图直到满足要求的特定键。我知道以下内容可用于获取地图的值:
Collection c = bigrams.values();
Iterator itr = c.iterator();
while (itr.hasNext()){
System.out.println(itr.next());
但是,我希望能够使用链接到迭代器的键来遍历映射,并根据其对键检查每个值。由于bigrams.values()
检索二元组的每个元素的值,我该如何更改它以检索键而不是值?
解决方案
您应该选择使用Map.keySet()
or 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()));
推荐阅读
- java - 一次最大 Spring "@Async" 调用数
- android - 如何使用 Cordova 本机更改 Android 导航栏颜色?
- angular - 如何使用angular2选择特定行进行删除操作
- python - Python Web Scraping Html Table 使用漂亮的汤
- safari - 如何在 Safari 网络推送通知中识别用户
- java - 如果 spring mvc 中的数据库中存在 input_field_1,如何要求 input_field_2?
- java - 如何在java中编写正则表达式
- javascript - 从中继器获取 id
- python - 熊猫列中唯一值的返回顺序
- hyperledger-fabric - 我可以在超级账本环境之外测试链码吗?没有码头工人,只是一些模拟