Java 8用函數語言程式設計實現集合操作案例

banq發表於2017-04-05
for和while是傳統Java用於遍歷集合的經典方法,本文程式碼演示如何使用Java8函式式lambda替代這兩條語句。

假設對集合進行篩選後排序,傳統程式碼如下:

public static List<String> getModelsAfter2000UsingFor(List<Car> cars) {
    List<Car> carsSortedByYear = new ArrayList<>();
 
    for(Car car : cars) {
      if(car.getYear() > 2000) {
        carsSortedByYear.add(car);
      }
    }
     
    Collections.sort(carsSortedByYear, new Comparator<Car>() {
      public int compare(Car car1, Car car2) {
        return new Integer(car1.getYear()).compareTo(car2.getYear());
      }
    });
     
    List<String> models = new ArrayList<>();
    for(Car car : carsSortedByYear) {
      models.add(car.getModel());
    }
     
    return models;
  }
<p class="indent">


這裡是將Car日期在2000年以後的篩選出來放到carsSortedByYear這個臨時集合,再根據日期排序,再轉為一個新的models集合,完成整個過程需要兩個臨時集合做轉換。

而使用Java 8的管道組合則簡單一句:

public static List<String> getModelsAfter2000UsingPipeline(
   List<Car> cars) {
   return 
     cars.stream()
         .filter(car -> car.getYear() > 2000)
         .sorted(Comparator.comparing(Car::getYear))
         .map(Car::getModel)
         .collect(toList());
 }
<p class="indent">


Java 8 idioms, Part 2: Function composition and th

相關文章