如何在java 8中展平列表

San*_*ari 4 java java-stream

class Employee {
    private String name;
    private List<Employee> members;
}

List<Employee> emps = Arrays.asList(new Employee("A", Arrays.asList(
     new Employee("B", null),
     new Employee("C", null)
)))
Run Code Online (Sandbox Code Playgroud)

用于展平的代码List

List<Employee> total = 
    emps.stream()
        .flatMap(emp -> emp.members.stream())
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

total List应该有3个要素,但只有2个。

Ani*_*wat 6

伊兰的答案是错的,也没有concatStream实例。这应该有效:

emps.stream()
        .flatMap(emp -> Stream.concat(emp.members.stream(), Stream.of(emp)))
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

Stream#concat