2017-08-25 67 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