मुझे जावा 8 स्ट्रीम के साथ कुछ वर्ग गुणों की सूची कैसे मिल सकती है?


134

मेरे पास ए List<Person>। मैं की Listएक संपत्ति से प्राप्त करने की आवश्यकता है Person

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

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इस तरह से एपीआई के साथ नामों की एक सूची प्राप्त करना चाहता हूं :

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

#David
#Joe
#Michel
#Barak

यह कोड काम नहीं करता है:

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;
    }
}


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

जवाबों:


310

आप उपयोग कर सकते हैं 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());

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

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

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

1
@ नगभूषणः आप लूप के लिए पारंपरिक या लूप के लिए या तो लूप के साथ पुनरावृति कर सकते हैं, लेकिन आपको कुछ लूप का उपयोग करना चाहिए।
एरन

1
@PAA फ्लैटपाइप से पहले एक फ़िल्टर कॉल जोड़ें:.filter(e->e.getFriends() != null)
Eran
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.