Próbuję przyciąć TreeMultimap
i mieć ten sam zorganizowany TreeMultimap
wrócił (ale przycięte). Na przykład mam różnych dostawców wiadomości, które zwracają nieuporządkowane wiadomości. Muszę posortować wiadomości według daty i utrzymać ten rodzaj w posortowanym multimapie według najnowszej daty. Wtedy potrzebuję możliwości zwrócenia najnowszych wiadomości X. Na dzień może być wiele nowości.Jak utworzyć TreeMultimap z Iterable/Collection?
TreeMultimap<Date, String> latestNews = TreeMultimap.create(Ordering.natural().reverse(), Ordering.natural());
ponieważ nie ma wykończenia lub rozmiaru TreeMultimap
, udało mi się zwrócić Iterable
i ograniczyć wyniki z tym, ale jak utworzyć nową TreeMultimap
z Iterable
?
Zasadniczo pomysł jest:
- utworzyć nowy klasyfikowane TreeMultimap
- umieścić dowolną liczbę wpisów nie są dostępne (
- przyciąć do X i powrócić mapie
także a co z różnymi zestawami danych, na przykład, czy chcę zaimplementować funkcje stronicowania?
Oto, jak zwrócić 5 ostatnich wiadomości, na przykład:
Map.Entry<Date, String> lastFiveNews = Iterables.limit(latestNews.entries(), 5)
Ale jak utworzyć nowy Multimap z wyniku?
Najprostszym sposobem byłoby tak proste, jak iteracji i tworzenia nowego 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);
Zastanawiałem się, czy istnieje rzeczywista klasa narzędzie/konstruktor, że może to zrobić bezpośrednio. To podejście wykorzystujące Iterables było jedyną, o której mogłem pomyśleć. Mogą być również inne podejścia.
Więc masz 'Iterable' i chcesz utworzyć 'TreeMultimap' z tego? Nie mogę znaleźć 'Limitu Iterables # tutaj http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html co to robi? –
Witam, to jest Guava, a nie kolekcje google. http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/collect/Iterables.html – Tony
Ahh okay, 'Iterables.limit' zwraca' Iterable', więc robi to nie przerywać, 'Map.Entry lastFiveNews = Iterables.limit (latestNews.entries(), 5)' Nie chcesz 'Iterable '? –