2012-11-23 6 views
10

Ich versuche, eine TreeMultimap zu trimmen, und habe die gleiche strukturierte TreeMultimap zurückgegeben (aber getrimmt). Zum Beispiel habe ich verschiedene Nachrichtenanbieter, die ungeordnete Nachrichten zurückgeben. Ich muss die Nachrichten nach Datum sortieren und diese Sortierung in der sortierten Multimap bis zum letzten Datum beibehalten. Dann brauche ich die Fähigkeit, die neuesten X Nachrichten zurückzugeben. Pro Datum kann es viele Neuigkeiten geben.Wie erstellt man eine TreeMultimap aus einem Iterable/Collection?

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

Da es keine Ordnung ist, oder die Größe des TreeMultimap habe ich es geschafft, ein Iterable zurückzukehren und die Ergebnisse mit, dass zu beschränken, sondern, wie eine neue TreeMultimap vom Iterable zu schaffen?

Im Grunde ist die Idee:

  • neue TreeMultimap
  • als sie zur Verfügung stehen setzen, wie viele Einträge sortiert erstellen (
  • trimmen zu X und zurück, die Karte

Auch Was ist mit verschiedenen Datensätzen zum Beispiel, wenn ich Seitenfunktionen wie Funktionen implementieren möchte?

Hier ist, wie Sie die letzten 5 Nachrichten zum Beispiel

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

Aber wie erstelle ich eine neue Multimap aus dem Ergebnis?

Der einfachste Weg wäre so einfach wie das Iterieren sein und eine neue TreeMultimap erstellen:

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); 

ich mich gefragt, ob es eine tatsächliche Utility-Klasse/Konstruktor ist, die direkt das tun kann. Dieser Ansatz unter Verwendung der Iterables war der einzige, an den ich denken konnte. Es kann auch andere Ansätze geben.

+0

Sie haben also 'Iterable ' und Sie möchten eine 'TreeMultimap' daraus erstellen? Ich finde "Iterables # limit" hier nicht http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html Was macht es? –

+0

Hallo, das ist Guava, nicht google-collections. http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/collect/Iterables.html – Tony

+0

Ahh okay, 'Iterables.limit' gibt ein' Iterable' zurück nicht brechen, 'Map.Entry lastFiveNews = Iterables.limit (latestNews.entries(), 5)' Willst du nicht 'Iterable '? –

Antwort

Verwandte Themen