用不同的排序策略给一个 Apple 列表排序(List inventory

  1. inventory.sort(comparing(Apple::getWeight));

逆序:

  1. inventory.sort(comparing(Apple::getWeight).reversed());

两个苹果一样重时,按产地进行比较:

  1. inventory.sort(comparing(Apple::getWeight)
  2. .reversed()
  3. .thenComparing(Apple::getCountry));

简短的定义就是“从支持数据处理操作的源生成的元素序列”。

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

image.png
为了利用多核架构执行,你只需要把 stream() 换成 parallelStream();

好处:

  1. 声明性——更简洁易读
    1. 代码是以声明性方式写的:说明想要完成什么(筛选热量低的菜肴)而不是说明如何实现一个操作(利用循环和if条件等控制流语句)
  2. 可复合——更灵活
    1. 你可以把几个基础操作链接起来,来表达复杂的数据处理流水线,同时保持代码清晰可读
  3. 可并行——性能更好
    1. 充分利用多核架构,且不用操心线程和锁

使用流:

  • 一个数据源(如集合)来执行一个查询;
  • 一个中间操作链,形成一条流的流水线;
  • 一个终端操作,执行流水线,并能生成结果。

按照Map里面的类别对菜肴进行分组
image.png
image.png
筛选菜单,找出三个高热量菜肴的名字
image.png
注意:流只能消费一次
image.png

使用流

筛选、切片和匹配

找、匹配和归约

使用数值范围等数值流

从多个源创建流

无限流