Как создать TreeMultimap из Iterable/Collection?

Я пытаюсь обрезать TreeMultimap и возвращать те же структурированные TreeMultimap (но обрезанные). Например, у меня есть разные поставщики новостей, которые возвращают неупорядоченные новости. Мне нужно сортировать новости по дате и поддерживать этот вид в отсортированной мультимаре по самой последней дате. Тогда мне нужна возможность вернуть самые последние новости из X. На дату может быть много новостей.

TreeMultimap<Date, String> latestNews = TreeMultimap.create(Ordering.natural().reverse(), Ordering.natural());

Поскольку нет обрезки или размера TreeMultimap, мне удалось вернуть Iterable и ограничить результаты этим, но как создать новый TreeMultimap из Iterable?

По существу, идея такова:

  • создать новый отсортированный TreeMultimap
  • введите столько записей, сколько доступно (
  • обрезать до X и вернуть карту

Кроме того, что же касается разных наборов данных, например, если я хочу реализовать пейджинговые функции?

Вот как вернуть последние 5 новостей, например

Map.Entry<Date, String> lastFiveNews = Iterables.limit(latestNews.entries(), 5)

Но как мне создать новый Multimap из результата?

Самый простой способ будет таким же простым, как итерация и создание нового TreeMultimap:

TreeMultimap<Date, String> lastFiveNews = TreeMultimap.create(Ordering.natural().reverse(), Ordering.natural());

for (Map.Entry<Date, String> dateStringEntry : Iterables.limit(latestNews.entries(), 5)) {
    lastFiveNews.put(dateStringEntry.getKey(), dateStringEntry.getValue());
}
latestNews.clear();
latestNews.putAll(lastFiveNews);

Мне было интересно, есть ли фактический класс/конструктор утилиты, который может сделать это напрямую. Этот подход с использованием Iterables был единственным, о котором я мог думать. Могут быть и другие подходы.

Ответ 1

То, как вы это делаете, - именно то, что вы должны делать.

Вам может быть интересно обсудить https://code.google.com/p/guava-libraries/issues/detail?id=320, что связано. (На самом деле это действительно фактический пример использования этих методов.)