首页 > 解决方案 > 在java中展平嵌套列表

问题描述

在下面的代码片段中,如何使用 java 8 流 API 以扁平方式打印列表?

public class MainClass {
    public static void main(String[] args) {
        List<Employee> list = new ArrayList<>();
        List<Address> jAddress = new ArrayList<>();
        jAddress.add(new Address("Victory Road 1", 10101));
        jAddress.add(new Address("Victory Road 2", 101011));
        list.add(new Employee("John", 1, jAddress));

        List<Address> aAddress = new ArrayList<>();
        aAddress.add(new Address("Cross road", 40101));
        list.add(new Employee("Alex", 2, aAddress));
    }
}

我想以以下格式打印列表。

["Jhon", 1, "victory road 1", 110220]
["Jhon", 1, "victory road 2", 101011]
["Alex", 2, "Cross road", 40101]

标签: javajava-8java-stream

解决方案


似乎需要创建一个原始列表/数组,包括来自Employeeand的字段Address(假设这些类中存在适当的 getter):

List<List<Object>> flattened = list.stream()
    .flatMap(emp -> emp.getAddresses().stream()
        .map(addr -> Arrays.asList(
            emp.getName(), emp.getId(), 
            addr.getAddress(), addr.getPostalCode()
        ))
    )
    .collect(Collectors.toList());

flattened.forEach(System.out::println); // should print desired result

推荐阅读