關於Java8NestedloopsToStream
Requirement
在一個Car物件的list中,Car物件本身有Wheel物件。
用兩層迴圈可容易使用條件篩選出符合條件的list。
for迴圈 Example
1 2 3 4 5 6 7 8 9 10
| List<Car> filteredCars = new ArrayList<>(); for (Car car : cars) { for (Wheel wheel : wheels) { if (car.getColor() == wheel.getColor() && wheel.isWorking()) { filteredCars.add(car); break; } } } return filteredCars;
|
stream Example
1 2 3
| List<Car> filteredCars = cars.stream().filter (car -> wheels.stream().anyMatch(wheel -> wheel.getColor() == car.getColor() && wheel.isWorking())) .collect(Collectors.toList());
|
結論
1 2 3 4
| 在Java 8 stream 出來之前,篩選資料中的資料只能用多個迴圈來處理,若遇到複雜的需求 程式碼會可讀性低及不好維護。 在Java 8 stream出來後,由上方的example就可以了解同一個需求兩種不同寫法的差異。 尤其當條件越多越複雜的時候,Java 8 stream 語法糖會更容易撰寫跟理解。
|