4.1 流是什么

流是Java8新引入的API。

  1. 声明性方式处理数据集合;
  2. 透明地并行处理;

获取按照卡路里升序,低热量的菜肴名称。

基于集合实现,其中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(),可利用多核架构并行执行。

  1. 声明性:代码更简洁、更易读,结合行为参数化和Lambda表达式应对需求变化;
  2. 可复合:基于筛选、切片、映射和归约等基本操作链接构建,代码更灵活;
  3. 可并行:透明利用多核架构,性能更好;
流操作链式构建
posted @ 2023-07-05 01:02  蒋智  阅读(60)  评论(0)    收藏  举报