4.1 流是什么
流是Java8新引入的API。
- 声明性方式处理数据集合;
- 透明地并行处理;
获取按照卡路里升序,低热量的菜肴名称。
基于集合实现,其中lowCaloricDishes是中间变量。
public static List<String> getSortedLowCaloricDishNamesByCollection(List<Dish> menu) {
List<Dish> lowCaloricDishes = Lists.newArrayList();
// filter
for (Dish d : menu) {
if (d.getCalories() < 400) {
lowCaloricDishes.add(d);
}
}
// sort
Collections.sort(lowCaloricDishes, new Comparator<Dish>() {
@Override
public int compare(Dish d1, Dish d2) {
return Integer.compare(d1.getCalories(), d2.getCalories());
}
});
// collect
List<String> result = Lists.newArrayList();
for (Dish d : lowCaloricDishes) {
// map
result.add(d.getName());
}
return result;
}
List<Dish> menu = Instance.getMenu();
// [season fruit, prawns, rice]
List<String> sortedLowCaloricDishNames = getSortedLowCaloricDishNamesByCollection(menu);
基于流实现。
public static List<String> getSortedLowCaloricDishNamesByStream(List<Dish> menu) {
return menu.stream()
.filter(d -> d.getCalories() < 400)
.sorted(Comparator.comparing(Dish::getCalories))
.map(Dish::getName)
.collect(Collectors.toList());
}
List<Dish> menu = Instance.getMenu();
// [season fruit, prawns, rice]
List<String> sortedLowCaloricDishNames = getSortedLowCaloricDishNamesByStream(menu);
将menu.stream()更换为menu.parallelStream(),可利用多核架构并行执行。
- 声明性:代码更简洁、更易读,结合行为参数化和Lambda表达式应对需求变化;
- 可复合:基于筛选、切片、映射和归约等基本操作链接构建,代码更灵活;
- 可并行:透明利用多核架构,性能更好;

浙公网安备 33010602011771号