用不同的排序策略给一个 Apple 列表排序(List
inventory.sort(comparing(Apple::getWeight));
逆序:
inventory.sort(comparing(Apple::getWeight).reversed());
两个苹果一样重时,按产地进行比较:
inventory.sort(comparing(Apple::getWeight)
.reversed()
.thenComparing(Apple::getCountry));
流
简短的定义就是“从支持数据处理操作的源生成的元素序列”。
流是 Java API 的新成员。它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。就现在来说,你可以把它们看成遍历数据集的高级迭代器。此外,流还可以透明地并行处理,你无需写任何多线程代码了。
为了利用多核架构执行,你只需要把 stream()
换成 parallelStream();
好处:
- 声明性——更简洁易读
- 代码是以声明性方式写的:说明想要完成什么(筛选热量低的菜肴)而不是说明如何实现一个操作(利用循环和if条件等控制流语句)
- 可复合——更灵活
- 你可以把几个基础操作链接起来,来表达复杂的数据处理流水线,同时保持代码清晰可读
- 可并行——性能更好
- 充分利用多核架构,且不用操心线程和锁
使用流:
- 一个数据源(如集合)来执行一个查询;
- 一个中间操作链,形成一条流的流水线;
- 一个终端操作,执行流水线,并能生成结果。
按照Map里面的类别对菜肴进行分组
筛选菜单,找出三个高热量菜肴的名字
注意:流只能消费一次