2013-02-05 52 views
5

कैसे मैं सबसे अच्छा सभी "नाम" निम्नलिखित संरचना की स्ट्रिंग तत्व प्राप्त कर सकते हैं:किसी सूची में किसी विशिष्ट संपत्ति के सभी तत्वों को निकालने के लिए कैसे करें?

class Foo { 
    List<Bar> bars; 
} 

class Bar { 
    private String name; 
    private int age; 
} 

मेरे दृष्टिकोण होगा:

List<String> names = new ArrayList<String>(); 

for (Bar bar : foo.getBars()) { 
    names.add(bar.getName()); 
} 

यह काम हो सकता है, लेकिन जावा में कुछ वहाँ नहीं है। Collections जहां मैं बस इस तरह लिख सकता हूं: Collections.getAll(foo.getBars(), "name");?

+3

हालांकि मैं यह स्वीकार करने के लिए यह कम बॉयलरप्लेट नहीं है है बस जावा 8 ;-) –

उत्तर

1

जावा 8 का उपयोग करना:

List<String> names =   
    foo.getBars().stream().map(Bar::getName).collect(Collectors.toList()); 
1

कुछ हद तक गूगल अमरूद

List<String> names = new ArrayList(Collections2.transform(foo.getBars(), new Function<Bar,String>() { 
    String apply(Bar bar) { 
     return bar.getName() 
    } 
}); 
+0

के लिए प्रतीक्षा करें ... – membersound

+0

हां, लेकिन टाइप-सुरक्षित और तर्क को छिपाएं –

-1

वहाँ किसी भी कारण से भी आपको मल्टीमैप Googles संग्रह ढांचे द्वारा आपूर्ति उपयोग नहीं कर सका है प्रदान करता है?

MultiMap

यह कई कुंजी मान के साथ एक नक्शा अनुमति देगा।

तो तुम एक नकली चाबी हो सकता था (एक hashmap कहना विपरीत) और के लिए सभी मान उस कुंजी

तो बस जुड़े मानचित्र, "की अपनी उम्मीद उदाहरण के रूप में एक ही कार्यान्वयन किया जाएगा, जिस पर मिल फोन getAll "

संग्रह प्राप्त (@Nullable कश्मीर कुंजी) देता है एक कुंजी से संबद्ध सभी मूल्यों का एक संग्रह मिलता है। यदि मल्टीमैप में कोई मैपिंग प्रदान की गई कुंजी है, तो एक खाली संग्रह वापस कर दिया जाता है। लौटाए गए संग्रह में परिवर्तन अंतर्निहित मल्टीमैप अपडेट करेंगे, और इसके विपरीत।

पैरामीटर: कुंजी - मल्टीमैप रिटर्न में के लिए खोज कुंजी करने के लिए: मान जो

3

के लिए महत्वपूर्ण नक्शे आप Eclipse Collections का उपयोग करते हैं की संग्रह और getBars बदल() एक MutableList या कुछ इसी तरह वापस जाने के लिए, आप लिख सकते हैं:

MutableList<String> names = foo.getBars().collect(new Function<Bar, String>() 
{ 
    public String valueOf(Bar bar) 
    { 
     return bar.getName(); 
    } 
}); 

आप बार पर एक निरंतर के रूप में समारोह को निकालने हैं, तो यह करने के लिए कम करता है:

MutableList<String> names = foo.getBars().collect(Bar.TO_NAME); 

जावा 8 लैम्बडास के साथ, आपको फ़ंक्शन की आवश्यकता नहीं है।

MutableList<String> names = foo.getBars().collect(Bar::getName); 

यदि आप GetBars() के रिटर्न प्रकार को नहीं बदल सकते हैं, तो आप इसे ListAdapter में लपेट सकते हैं।

MutableList<String> names = ListAdapter.adapt(foo.getBars()).collect(Bar.TO_NAME); 

नोट: मैं ग्रहण संग्रह के लिए एक committer हूँ।

+0

गुवा संग्रह द्वारा उत्तर के साथ दो अंतर खोजें :) –

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