2015-06-03 7 views
38

मेरे पास List<Person> है। मुझे Person की संपत्ति से List प्राप्त करने की आवश्यकता है।मैं जावा 8 स्ट्रीम के साथ कुछ वर्ग गुणों से सूची कैसे प्राप्त कर सकता हूं?

List<String> names = personList.stream().somecode().collect(Collectors.toList()); 
names.stream().forEach(System.out::println); 

#David 
#Joe 
#Michel 
#Barak 

इस कोड काम नहीं करता:

class Person 
{ 
    private String name; 
    private String birthDate; 
    public String getName() { 
     return name; 
    } 
    public String getBirthDate() { 
     return birthDate; 
    } 
    Person(String name) { 
     this.name = name; 
    } 
} 

List<Person> personList = new ArrayList<>(); 
personList.add(new Person("David")); 
personList.add(new Person("Joe")); 
personList.add(new Person("Michel")); 
personList.add(new Person("Barak")); 

मैं Stream एपीआई इस तरह के साथ नामों की सूची प्राप्त करना चाहते हैं:

उदाहरण के लिए, मैं एक Person वर्ग है

public class Main 
{ 
    public static void main(String[] args) 
    { 
     List<Person> personList = new ArrayList<>(); 
     Person person = new Person("Иван"); 
     person.getFriends().addAll(Arrays.asList("Друг 1", "Друг 2", "Друг 3")); 
     personList.add(person); 
     person = new Person("Федор"); 
     person.getFriends().addAll(Arrays.asList("Друг 4", "Друг 5", "Друг 6")); 
     personList.add(person); 
     person = new Person("Алексей"); 
     person.getFriends().addAll(Arrays.asList("Друг 7", "Друг 8", "Друг 9")); 
     personList.add(person); 
     person = new Person("Константин"); 
     person.getFriends().addAll(Arrays.asList("Друг 10", "Друг 11", "Друг 12")); 

     List<String> friens = personList.stream().map(e->e.getFriends()).collect(Collectors.toList()); 

     friends.stream().forEach(System.out::println); 
     //Друг 1 
     //Друг 2 
     //Друг 3 
     //Друг 4 
     //... 

    } 
} 

class Person 
{ 
    String name; 
    List<String> friends; 

    Person(String name) { 
     this.name = name; 
    } 
    public String getName() { 
     return name; 
    } 

    public List<String> getFriends() { 
     return friends; 
    } 
} 


कैसे क्या मुझे Stream एपीआई वाली संपत्ति के List मिल सकते हैं?

उत्तर

102

कि बुनियादी है, तो आप map का उपयोग करें:

List<String> names = 
    personList.stream() 
       .map(Person::getName) 
       .collect(Collectors.toList()); 

संपादित करें:

आदेश दोस्त नामों की सूची संयोजित करने के लिए आपको flatMap उपयोग करने की आवश्यकता:

List<String> friendNames = 
    personList.stream() 
       .flatMap(e->e.getFriends().stream()) 
       .collect(Collectors.toList()); 
+0

धन्यवाद। मैं स्ट्रिंग्स की कई सूचियों को कैसे विलय कर सकता हूं जो मुझे मिली। मैप (व्यक्ति :: getFriends); – NCNecros

+1

@NCNecros यह इनपुट पर निर्भर करता है। मुझे समझ में नहीं आता कि आप प्रश्न में जोड़े गए कोड में क्या करने की कोशिश कर रहे हैं। – Eran

+0

@Eran क्या यह सूची खाली होने पर मामले को संभालेगी? – Joy

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