Я пытаюсь обрезать 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 был единственным, о котором я мог думать. Могут быть и другие подходы.