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; }
|
这里是将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()); }
|
Java 8 idioms, Part 2: Function composition and th