一. 接口
以往的接口中只能有抽象方法,不能有其他方法,子类必须要实现接口中的所有方法。
现在在接口中可以定义静态方法并实现,可以直接通过接口.方法名来进行调用。
在接口中可以定义默认方法,并且自己实现,子类可以不实现这些默认方法,默认方法使用default关键字进行定义。
二.函数式接口
接口中只有一个抽象方法的接口叫做函数式接口,JDK中提供了四种基础的函数式接口
- Consumer 消费型接口【只接收,不返回】 void accept(T t)
- Supplier 供给型接口【只返回,不接收】 T get()
- Function 函数型接口 【有输入,有输出,标准函数类型】 R apply(T t)
- Predicate 断言型接口【对传入的值进行判断】 boolean test(T t)
三.Lambda表达式
Lambda表达式用于简化匿名内部类的书写,尤其是对于函数式接口来说,更是大大的减少了我们需要写的代码,并且可读性也更好。
基本格式:
1 | rust复制代码(参数列表)->{return 实际方法体} |
举例:
1 | typescript复制代码 //传统的匿名内部类 |
一个特殊的表达式 ::
1 | ini复制代码 //1. 对象::实例方法 方法体中的方法和函数式接口中的方法返回值和参数个数都相同,可以进行简化 |
四.stream()流
stream流是jdk1.8出现的用来对集合进行操作的一种形式
4.1 获取流的方式
- 所有的Collection集合都可以通过stream()的方式获取流。
- Stream接口的静态方法可以获取相应的流。
1 | scss复制代码 System.out.println("------------------------迭代流----------------------------"); |
4.2 流的操作
Stream流接口中定义了许多对于集合的操作方法,总的来说分为两大类:中间操作和结束操作。
- 中间操作会返回另外一个流,通过这种方式将多个中间操作连接起来,形成一个调用链,从而转换为另外一个流,除非调用链后存在一个结束操作,否则中间操作流程不会对结果进行任何处理。
- 结束操作会返回一个具体的结果。如boolean,integer,list等
4.2.1 中间操作【链式编程】
- filter 过滤、limit 限制、skip 跳过、distinct 去重、sorted 排序
- map 数据映射、paraller 获取并行流
1 | scss复制代码List<String> list = new ArrayList<>(); |
4.2.2 结束操作
- forEach 遍历、min 求最小、max 求最大、count 技术
- reduce collect anyMatch 判断流中至少存在一个元素 allMatch
结语
创作不易,如果对您有帮助的话请点个赞哦~
本文转载自: 掘金