2017-08-25 65 views
1

我有一个Car类,每个Car类都有一个Wheel类的列表,每个Wheel类都有一个整数场airPressure。如何迭代Java 8中的lambda过滤器流中的列表?

public class Car { 
    private List<Wheel> wheels; 
    public List<Wheel> getWheels() { 
    return wheels; 
    } 
} 

public class Wheel { 
    private int airPressure; 
    public int getAirPressure() { 
    return airPressure; 
    } 
} 

现在我有汽车的名单,我要筛选出有任何轮子空气压力比默认值大的所有汽车。我正在过滤汽车,但我需要遍历所有车轮。现在我有这样的代码:

I have: List<Cars> cars, int defaultValue 
List<Cars> filteredCars = cars.stream() 
    .filter(car -> car.getWheels().get(0).getAirPressure() < defaultValue) 
    .filter(car -> car.getWheels().get(1).getAirPressure() < defaultValue) 
    .filter(car -> car.getWheels().get(2).getAirPressure() < defaultValue) 
    ... 

如何在过滤汽车时迭代每辆车的车轮?

+0

看一看[这](http://crunchify.com/how-to-iterate-through-java- list-4-way-to-iterate-through-loop /)howto page? –

回答

0

这将在下文defaultValue只选择汽车行驶所有车轮空气压力:

List<Car> filteredCars = cars.stream() 
     .filter(car -> car.getWheels() 
       .stream() 
       .allMatch(wheel -> wheel.getAirPressure() < defaultValue)) 
     .collect(Collectors.toList()); 
+0

感谢您的回答。你知道什么是最简单的方法来找到所有车辆的所有车轮的airpressure的最大值? – cuegod

+0

'cars.stream().map(Car :: getWheels).flatMap(List :: stream).mapToInt(Wheel :: getAirPressure).max()' – shmosel

+0

这就是工作。谢谢! – cuegod