FlatMap ArrayList với stream api

Giả sử các bạn có danh sách của Student, mỗi Student lại có một danh sách các người thân, mỗi người thân đại diện bởi class Person (name, id, age).

Yêu cầu: Lấy danh sách toàn bộ người thân của sinh viên

syntax

public final <R> Stream<R> flatMap(Function<? super P_OUT, ? extends Stream<? extends R>> mapper)
// File Person.java

public class Person {
    private String name;
    private String id;
    private int age;

    public Person(String name, String id, int age) {
        this.name = name;
        this.id = id;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", id='" + id + '\'' +
                ", age=" + age +
                '}';
    }
}
// File Student.java

import java.util.List;

public class Student {
    private String name;
    private List<Person> relatives;

    public Student(String name, List<Person> relatives) {
        this.name = name;
        this.relatives = relatives;
    }

    public List<Person> getRelatives() {
        return relatives;
    }
}
// File Main.java 
import java_regex.Person;
import java_regex.Student;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<Student> arr = new ArrayList<>();
        List<Person> relatives1 = new ArrayList<>();
        relatives1.add(new Person("CHA", "01", 50));
        relatives1.add(new Person("ME", "02", 55));
        relatives1.add(new Person("BA", "03", 70));
        arr.add(new Student("A", relatives1));


        List<Person> relatives2 = new ArrayList<>();
        relatives2.add(new Person("CHA", "04", 60));
        relatives2.add(new Person("ME", "05", 65));
        relatives2.add(new Person("BA", "06", 85));
        arr.add(new Student("B", relatives2));

        List<Person> persons = arr.stream()
                .flatMap(student -> student.getRelatives().stream())
                .collect(Collectors.toList());

        persons.forEach(person -> System.out.println(person.toString()));

    }
}

Output:

Person{name=’CHA’, id=’01’, age=50}
Person{name=’ME’, id=’02’, age=55}
Person{name=’BA’, id=’03’, age=70}
Person{name=’CHA’, id=’04’, age=60}
Person{name=’ME’, id=’05’, age=65}
Person{name=’BA’, id=’06’, age=85}

‹Previous

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x