2012-11-23 42 views
10

मैं TreeMultimap को ट्रिम करने की कोशिश कर रहा हूं, और उसी संरचित TreeMultimap लौटा है (लेकिन छंटनी)। उदाहरण के लिए, मेरे पास अलग-अलग समाचार प्रदाता हैं जो अनियंत्रित समाचार लौटाते हैं। मुझे तारीख तक समाचार को सॉर्ट करना होगा और इस तरह के सॉर्ट किए गए मल्टीमैप में हाल ही की तारीख तक बनाए रखना होगा। तो मुझे सबसे हालिया एक्स समाचार वापस करने की क्षमता की आवश्यकता है। प्रति तारीख, कई खबरें हो सकती हैं।एक Iterable/संग्रह से TreeMultimap कैसे बनाएँ?

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

क्योंकि वहाँ कोई ट्रिम, या TreeMultimap के आकार है, मैं कैसे एक नया TreeMultimapIterable से बनाने के लिए एक Iterable लौट सकते हैं और उस के साथ परिणामों को सीमित करने में कामयाब है, लेकिन?

अनिवार्य रूप से, विचार है:

  • नई TreeMultimap
  • हल कर के रूप में कई प्रविष्टियों डाल बनाने के रूप में वहाँ उपलब्ध हैं (
  • एक्स के लिए ट्रिम और भी नक्शे को वापस

, उदाहरण के लिए डेटा के विभिन्न सेटों के बारे में क्या है यदि मैं सुविधाओं जैसे पेजिंग को कार्यान्वित करना चाहता हूं?

उदाहरण के लिए पिछले 5 समाचारों को वापस कैसे करें

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

लेकिन मैं परिणाम से एक नया मल्टीमैप कैसे बना सकता हूं?

सबसे आसान तरीका है बार-बार दोहराना के रूप में सरल है और एक नया 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 का उपयोग कर यह दृष्टिकोण केवल एक ही था जिसे मैं सोच सकता था। अन्य दृष्टिकोण भी हो सकते हैं।

+0

तो आपके पास 'Iterable 'है और आप उस से' TreeMultimap' बनाना चाहते हैं? मैं यहां 'Iterables # सीमा' नहीं ढूंढ सकता http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html यह क्या करता है? –

+0

हाय, यह गुवा है, Google संग्रह नहीं। http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/collect/Iterables.html – Tony

+0

आह ठीक है, 'Iterables.limit' एक' Iterable' देता है तो यह करता है ब्रेक न करें, 'मानचित्र। एंटर्री <डेट, स्ट्रिंग> lastFiveNews = Iterables.limit (नवीनतम न्यूजेंट्स(), 5)' क्या आप 'Iterable ' नहीं चाहते हैं? –

उत्तर

3

जिस तरह से आप पहले से ही कर रहे हैं वही है जो आपको करना चाहिए।

आप https://code.google.com/p/guava-libraries/issues/detail?id=320 पर चर्चा में रुचि रखते हैं, जो संबंधित है। (यह वास्तव में उन तरीकों के लिए वास्तविक वैध उपयोग केस की तरह प्रतीत होता है।)

संबंधित मुद्दे