Как создать коллекцию и итератор, которые проходят через определенные значения, пока не достигнут одного? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть TreeMap<Token, ArrayList<Token>>, и я хочу перебирать карту до тех пор, пока не появится конкретный ключ, который удовлетворяет требованию.Я знаю, что для получения значений карты работает следующее:

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

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

Однако я хочу иметь возможность выполнять итерацию по карте с ключами, связанными с итератором, и проверять каждое значение на основе егопара ключей.Поскольку bigrams.values() извлекает значение каждого из элементов биграммы, как я могу изменить это для получения ключей вместо значений?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Вы должны использовать 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()));
0 голосов
/ 12 апреля 2019

Ваш вопрос немного загадочный, но если вы хотите получить ключи, вы можете просто использовать метод 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
}
...