Это старый вопрос, но я думаю, что ему не хватает ответа, который использует более новый подход. Следующие функции Java 9 используются:
Deque<Map.Entry<String, RecordItemElement>> top = map.entrySet().stream()
.takeWhile(e -> !givenKey.equals(e.getKey()))
.collect(Collectors.toCollection(ArrayDeque::new));
Приведенный выше код выполняет потоковую передачу набора записей карты, сохраняя записи до тех пор, пока не будет найден ключ, равный данному ключу. Затем записи собираются в ArrayDeque
.
Одна деталь отсутствует, хотя. В зависимости от того, нужна ли вам запись, соответствующая данному ключу, для включения в результат или нет, вам может потребоваться вручную добавить ее в очередь. Если вы не хотите, чтобы это было добавлено, то все готово. В противном случае просто выполните:
top.add(Map.entry(givenKey, map.get(givenKey)));
Теперь, чтобы повторить Deque
в обратном порядке, просто используйте его descendingIterator()
:
Iterator<Map.Entry<String, RecordItemElement>> descIt = top.descendingIterator();
Стоит отметить, что этот подход работает, только если поток последовательный . В любом случае, мы бы не получили ничего, используя параллельный поток здесь.