美文网首页
第四章:引入流

第四章:引入流

作者: 依然爱笑的薰衣草 | 来源:发表于2017-10-25 21:58 被阅读3次

流是什么

流是Java API的新成员,它允许你以声明式方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现),也可以把它们看成遍历数据集的高级迭代器。此外,流还可以透明的并行处理,无需写任何多线曾代码。

我们来对比一下使用流和不使用流的两种情况下的筛选目标集合代码。
不使用流的代码:

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

在这段代码中,你用了一个“垃圾变量” lowCaloricDishes 。它唯一的作用就是作为一次性的中间容器。
使用流的代码:

List<String> lowCaloricDishesName =menu.parallelStream()
  .filter(d -> d.getCalories() < 400)
  .sorted(comparing(Dishes::getCalories))
  .map(Dish::getName)
  .collect(toList());

使用流的代码,有几个显而易见的好处

  1. 代码是以声明式方式写的
  2. 你可以把几个基础操作连接起来,来表达复杂的数据处理流水线,同时保持代码清晰可读。

再看一个例子,代码如下:

Map<Dish.Type, List<Dish>> dishesByType =menu.stream().collect(groupingBy(Dish::getType));

作用是按照Map里面的类别对menu集合进行分组。

相关文章

  • 第四章:引入流

    流是什么 定义:从支持数据处理的操作的源生成的元素序列流是javaAPI的新成员,他让你以生命的方式处理数据集合(...

  • 第四章:引入流

    流是什么 流是Java API的新成员,它允许你以声明式方式处理数据集合(通过查询语句来表达,而不是临时编写一个实...

  • 第四章 引入流

    1、流的概念:从支持数据处理操作的源生成的一系列元素 2、流利用内部迭代:迭代通过中间操作被抽象掉了 3、流操作有...

  • 入流

    太阳从地平线上升起 叫醒了这沉睡的大地 我走下山 混入那人流不息

  • 入流

    这两天我在阅读小说《淘金》三部曲。 这部小说是毕业于苏大的余一鸣所写。 小说分为三个部分:入流,不二,放下。我正在...

  • 醉花阴·凝夜

    她许月色妆了梅花面,落笔处,水墨丹青; 一瓣落花轻惦记,坠入流年风雨。 寒蝉引,初雪端倪,卸下浮云意; 横塘转身,...

  • “解读《文化自信和民族复兴》”(61)“五个数字背后的启迪 

    人生有五种入流之心(人),也有五种不入流之心(人),那么,如何与“五入流”及“五不入流”相处呢? 其实...

  • 标准的IO流

    o标准输入流 oPublist static final InputStream in:字节输入流 ·使用: §I...

  • 如何避免自大的高估自己

    现在,我在一个不入流的学校里不入流的学着课业,过着不入流的生活写着不入流的文字,并且觉得自己的未来一片大好,会变得...

  • 引入流

    流是什么 流是Java api的新成员,它允许你以申明式的方式处理数据集合。申明性:更简洁,更易读可复合:更灵活可...

网友评论

      本文标题:第四章:引入流

      本文链接:https://www.haomeiwen.com/subject/fnmcpxtx.html