首页 > 解决方案 > 使用 lambda 遍历多个嵌套列表

问题描述

如何在已经使用 lambdas 遍历另一个列表的同时遍历一个列表?我有 1 个汽车对象,一个我正在遍历的 Something 对象列表,在此过程中我需要遍历每个 Wheel 对象。输出是一个不同对象 Clean 的列表。

    Car car = new Car();
    List<Something> somethings = new ArrayList<Something>();
    //say we have multiple items in this List
    List<Clean> cleanList =
             somethings.stream()
                    .map(something -> {
                        return car.wheels.stream().map(wheel -> something.clean(car, wheel));                        })
                    .collect(Collectors.toList());

对于以下对象,

class Car {

    String carId;

    String carName;

    List<Wheel> wheels;
}

class Wheel {

    String wheelId;

    String wheelType;
}

class Something {

    String somethingId;

    String somethingType;

    public Clean clean(Car car, Wheel wheel) {
        return new Clean();
    }
}

class Clean {

    String cleanId;

    String cleanType;
}

我想遍历所有车轮的所有东西。我试过这样做,但它不起作用。

标签: javalistlambdajava-streamtraversal

解决方案


你需要把它弄平,所以aflatMap会做

List<Clean> cleanList =
            somethings.stream()
                    .flatMap(something -> car.wheels.stream().map(wheel -> something.clean(car, wheel)))
                    .collect(Collectors.toList());

推荐阅读