Java 8用函数式编程实现集合操作案例

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