如何创建一个经过一定值直到达到一个值的集合和迭代器?

时间:2019-04-12 20:15:51

标签: java iterator treemap

我有一个TreeMap<Token, ArrayList<Token>>,我想遍历地图,直到满足要求的特定键为止。我知道以下方法可用于获取地图的值:

Collection c = bigrams.values();
Iterator itr = c.iterator();

while (itr.hasNext()){
    System.out.println(itr.next());

但是,我希望能够使用链接到迭代器的键在地图中进行迭代,并根据其配对键检查每个值。由于bigrams.values()检索了bigram中每个元素的值,我该如何更改它以检索键而不是值?

2 个答案:

答案 0 :(得分:0)

您的问题有点神秘,但是如果您想获取密钥,则可以简单地使用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
}

答案 1 :(得分:0)

您应该随后使用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()));