আমি জাভা 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এই জাতীয় API এর সাথে নামের তালিকা পেতে চাই:

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 (ব্যক্তি :: getF Friendss) এর সাথে আমি যে স্ট্রিং পেয়েছি তার অনেকগুলি তালিকা আমি কীভাবে মার্জ করতে পারি;
এনসিএনক্রস

1
@ এনসিএনক্রোস এটি নির্ভর করে যে ইনপুটটি কী। আপনি প্রশ্নের সাথে যুক্ত কোডটিতে কী করতে চাইছেন তা আমি বুঝতে পারি না।
ইরান

@ ইরান তালিকাটি খালি থাকলে কেস মামলা করবে?
জয়

1
@ নাগভূষণএসএন আপনি ফোরচ লুপ, লুপের জন্য বা লুপের সময় প্রচলিত দুটি দিয়ে পুনরাবৃত্তি করতে পারেন তবে আপনাকে অবশ্যই কিছু লুপ ব্যবহার করতে হবে।
ইরান

1
@ পিএএ ফ্ল্যাটম্যাপের আগে একটি ফিল্টার কল যুক্ত করুন:.filter(e->e.getFriends() != null)
এরান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.