2012-11-23 13 views
10

Bir TreeMultimap düzeltmeye çalışıyorum ve aynı yapılandırılmış TreeMultimap (ancak kesilmiş) yapılandırılmış. Örneğin, sıralanmamış haberleri veren farklı haber sağlayıcılarım var. Haberleri tarihe göre sıralamalıyım ve bu sıralamayı en son tarihe göre sıralanmış multimapta tutmalıyım. O zaman en son X haberlerini iade etme yeteneğine ihtiyacım var. Bugüne kadar birçok haber olabilir. TreeMultimap hiçbir trim veya boyutunu olmadığı içinYinelenebilir/Koleksiyondan TreeMultimap nasıl oluşturulur?

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

, bir Iterable dönebilir ve bu sonuçları sınırlamak için idare ettik, ama nasıl Iterable yeni TreeMultimap oluşturmak için?

Esasen, fikir: Mevcut olduğu gibi

  • (TreeMultimap
  • sıralanmış sayıda giriş koymak yeni oluştur
  • X Döşeme ve ayrıca haritayı

dönmek örneğin farklı veri kümelerinin hakkında ne özellikleri gibi disk belleği uygulamak isterseniz?

İşte sonucundan yeni Multimap'de oluştururum nasıl örnek

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

için son 5 haberleri döndüren Ama nasıl olduğunu?

kolay yolu olarak iterating kadar basit ve yeni bir TreeMultimap oluşturarak olacaktır: doğrudan bunu yapabilir gerçek bir yardımcı sınıf/yapıcı olup olmadığını merak

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'ı kullanarak bu yaklaşım düşünebildiğim tek kişiydi. Başka yaklaşımlar da olabilir.

+0

Yani 'iterable ' var (Bu. Aslında, bu yöntemler için gerçek bir geçerli kullanım vaka gibi görünüyor) ve bu bir 'TreeMultimap' oluşturmak istiyorsunuz? Http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html burada 'Iterables # limit 'bulamıyorum ne işe yarar? –

+0

Merhaba, bu google koleksiyonları değil, Guava. http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/collect/Iterables.html – Tony

+0

Ahh tamam, 'Iterables.limit 'bir' Yinelenebilir 'döndürür. kırmayın, 'Map.Entry lastFiveNews = Iterables.limit (latestNews.entries(), 5)' 'Çok Yönlü ' istiyor musun? –

cevap