获取List对象中每个对象里的子List对象总集合

class A{
    
    
List<B> bList;
}
class B {
    
    
String name;
}

List<A> list = new ArrayList<>;

如上我们需要得到list里所有的BbList的值

**方法一:**可以遍历A,用新的数组去接受所有bList(这种情况针对一种嵌套其实还好,但是有多层其实就不太好办了)

**方法二:**使用reduce:所以可以使用java8 stream Api的reduce

例子如下:

@Data
public class Student implements Serializable {
    
    

    private String name;
    private int age;

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

    public Student() {
    
    

    }
    }
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Grades {
    
    

    private String name;

    private List<Student> students;
}
public class ListList {
    
    

    public static void main(String[] args) {
    
    
        Student s1 = new Student("zs", 1);
        Student s2 = new Student("ls", 2);
        ArrayList<Student> list1 = Lists.newArrayList();
        list1.add(s1);
        list1.add(s2);

        Student s3 = new Student("ww", 3);
        Student s4 = new Student("yl", 4);
        Student s5 = new Student("zb", 5);

        ArrayList<Student> list2 = Lists.newArrayList();
        list2.add(s3);
        list2.add(s4);
        list2.add(s5);

        ArrayList<Student> list3 = Lists.newArrayList();
        list3.add(s3);
        list3.add(s4);
        list3.add(s5);

        ArrayList<Grades> gradeList = Lists.newArrayList();
        Grades grade1 = Grades.builder().name("一年级").students(list1).build();
        Grades grade2 = Grades.builder().name("二年级").students(list2).build();
        Grades grade3 = Grades.builder().name("三年级").students(list3).build();

        gradeList.add(grade1);
        gradeList.add(grade2);
        gradeList.add(grade3);

        List<Student> students = gradeList.stream().map(Grades::getStudents).reduce((v1, v2) -> {
    
    
            v1.addAll(v2);
            return v1;
        }).get();
        System.out.println(students);

        System.out.println("===========================================");
        List<String> name = gradeList.stream().map(Grades::getStudents).reduce((v1, v2) -> {
    
    
            v1.addAll(v2);
            return v1;
        }).get().stream().map(Student::getName).collect(Collectors.toList());
        System.out.println(name);
    }

}


[com.samubo.Student{name='zs', age=1}, com.samubo.Student{name='ls', age=2}, com.samubo.Student{name='ww', age=3}, com.samubo.Student{name='yl', age=4}, com.samubo.Student{name='zb', age=5}, com.samubo.Student{name='ww', age=3}, com.samubo.Student{name='yl', age=4}, com.samubo.Student{name='zb', age=5}]
===========================================
[zs, ls, ww, yl, zb, ww, yl, zb, ww, yl, zb, ww, yl, zb]

猜你喜欢

转载自blog.csdn.net/loveyour_1314/article/details/120857363
今日推荐