मैं new List(Collection2.filter())
निश्चित रूप से उपयोग कर सकता हूं , लेकिन इस तरह से यह गारंटी नहीं है कि मेरा ऑर्डर समान है।
यह सच नहीं है। Collections2.filter()
एक आलसी-मूल्यांकन किया गया कार्य है - यह वास्तव में आपके संग्रह को तब तक फ़िल्टर नहीं करता है जब तक कि आप फ़िल्टर किए गए संस्करण का उपयोग शुरू नहीं करते हैं। उदाहरण के लिए, यदि आप फ़िल्टर किए गए संस्करण पर पुनरावृत्ति करते हैं, तो फ़िल्टर किए गए तत्व आपके मूल संग्रह (शून्य से फ़िल्टर किए गए शून्य, स्पष्ट रूप से) के रूप में उसी क्रम में पुनरावृत्त से बाहर निकल जाएंगे।
शायद आप सोच रहे थे कि यह फ़िल्टरिंग को आगे बढ़ाता है, फिर परिणामों को एक अनियंत्रित, कुछ फॉर्म के अनऑर्डेड संग्रह में डंप करता है - जो आपको दिखाई नहीं देता है।
इसलिए यदि आप Collections2.filter()
एक नई सूची में इनपुट के रूप में आउटपुट का उपयोग करते हैं , तो आपका मूल आदेश बरकरार रहेगा ।
स्थैतिक आयात (और Lists.newArrayList
फ़ंक्शन) का उपयोग करते हुए , यह काफी सफल हो जाता है:
List filteredList = newArrayList(filter(originalList, predicate));
ध्यान दें कि जब Collections2.filter
नहीं बेसब्री से पुनरावृति अंतर्निहित संग्रह से अधिक, होगा Lists.newArrayList
होगा - यह संग्रह फ़िल्टर्ड के सभी तत्वों को निकालने और उन्हें एक नया में कॉपी कर देंगे ArrayList
।