流简短的定义就是“从支持数据处理操作的源生成的元素序列”。
流于集合的区别:
粗略地说,集合与流之间的差异就在于什么时候进行计算。集合是一个内存中的数据结构, 它包
含数据结构中目前所有的值——集合中的每个元素都得先算出来才能添加到集合中。(你可 以往
集合里加东西或者删东西,但是不管什么时候,集合中的每个元素都是放在内存里的,元素 都得
先算出来才能成为集合的一部分。)
流则是在概念上固定的数据结构(你不能添加或删除元素),其元素则是按需计 算的。
流的使用:
流的使用一般包括三件事:
- 一个数据源(如集合)来执行一个查询;
- 一个中间操作链,形成一条流的流水线;
- 一个终端操作,执行流水线,并能生成结果。
流的操作: 分为中间操作和终端操作
使用流:
筛选:
filter:
映射:
map: 会接受一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素
排序:
给库存排序,比较苹果的重量
inventory.sort(comparing(Apple::getWeight));
方法引用:
File[] hiddenFiles = new File(".").listFiles(File::isHidden);
需用Java 8的方法引用::语法(即“把这 个方法作为值”)将其传给listFiles方法;
以写(int x) -> x + 1,表示“调用时给定参数x, 就返回x + 1值的函数”
Apple::isGreenApple (它接受参数 Apple 并返回一个 boolean)
目标引用放在分隔符::前,方法的名称放在后面。
例如, Apple::getWeight
就是引用了Apple类中定义的方法getWeight。
请记住,不需要括号,因为 你没有实际调用这个方法。
方法引用就是Lambda表达式(Apple a) -> a.getWeight()的快捷 写法。