javastack

首先给大家看一段代码,让大家直观感受下 Java7 和 Java8 遍历处理集合的不同

Dish 是一个菜肴对象,calories 属性表示该菜品的卡路里值,name 则是菜品的名称。我们需要过滤出卡路里小于400、然后根据卡路里值升序、接着拿到他们的名称列表并返回

Java7

public static List<String> getLowCaloricDishesNamesInJava7(List<Dish> dishes){  
    List<Dish> lowCaloricDishes = new ArrayList<>();  
    for(Dish d: dishes){  
        if(d.getCalories() < 400){  
            lowCaloricDishes.add(d);  
        }  
    }  
    List<String> lowCaloricDishesName = new ArrayList<>();  
    Collections.sort(lowCaloricDishes, new Comparator<Dish>() {  
        public int compare(Dish d1, Dish d2){  
            return Integer.compare(d1.getCalories(), d2.getCalories());  
        }  
    });  
    for(Dish d: lowCaloricDishes){  
        lowCaloricDishesName.add(d.getName());  
    }  
    return lowCaloricDishesName;  
}  

Java8

public static List<String> getLowCaloricDishesNamesInJava8(List<Dish> dishes){  
    return dishes.stream()  
        .filter(d -> d.getCalories() < 400)  
        .sorted(comparing(Dish::getCalories))  
        .map(Dish::getName)  
        .collect(toList());  
}  

如果需要多核并行处理,则只需调用 dishes.parallelStream() 即可

在 Java8 之前,程序员需要通过 2次遍历 + 一次集合排序才能完成的工作,Java8 只需要一个链式调用就可以解决。这就是 Stream 的强大之处

认识流

流是什么

流是 Java API 的新成员,允许程序员以声明式的方式处理集合数据,并且支持链式调用、支持并行处理。用流处理的集合数据高效且易读。Stream 的 10 种创建方式,这篇推荐你看下。更多Java8新特性教程关注公众号Java技术栈回复Java获取。

流与集合的异同

  1. 集合的主要功能是以一定的时间和空间复杂度存储和访问元素,而流主要是用于元素计算

  2. 集合中的元素可以随意添加和删除,而流不能添加和删除元素

  3. 流的元素是按需计算的,只有当用到时他才会参与计算,而集合中的元素必须提前全都准备好

  4. 流只能遍历一次,下面的代码会报错 java.lang.IllegalStateException: stream has already been operated upon or closed 流已经被消费掉

List<String> names = Arrays.asList("Java8", "Lambdas", "In", "Action");  
Stream<String> s = names.stream();  
s.forEach(System.out::println);  
s.forEach(System.out::println);  
  1. 集合采用外部迭代,流采用内部迭代。内部迭代意味着 Java 可以替你选择更优的迭代策略和并行处理。而外部迭代如果程序员想着做个更有的迭代/采用并行就相当于“下次一定”

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-09-18
  • 2022-12-23
  • 2021-05-26
  • 2021-07-15
  • 2022-12-23
  • 2021-09-25
  • 2021-07-01
猜你喜欢
  • 2021-11-16
  • 2021-08-10
  • 2022-12-23
  • 2021-06-23
  • 2021-12-29
  • 2022-02-11
相关资源
相似解决方案