3.1.特殊的接口
类的二个要素是什么? 属性和方法
属性三要素: (修饰符)类型,名字,值
方法五要素: 修饰符,返回值,方法名,形参,方法体
构造方法: 是一个特殊的方法;
抽象方法: 是一个特殊的方法
抽象类是一个特殊的类
接口是一个特殊的抽象类
接口中的方法全部是抽象的
接口中的属性全部是public static final
Jdk1.8:新特性:
在接口中的方法可以有方法体
3.2.lambda表达式
是被python,scala逼出来的;语法超级简洁
匿名类:
目标方法的参数得是一个接口;
方法的参数里面直接new后面跟上接口名
必须马上写类体,重写方法体
lambda表达式的先决条件
目标方法的参数是一个接口
接口中只有一个抽象方法,这个抽象方法不是Object里面的方法
接口最好顶一个注解:@FunctionalInterface
lambda如何写开发:
把接口中抽象的方法复制一份到代码中(一定要加注释)
接口中唯一的抽象方法
-
public abstract void run();
-
最全的写法:它是唯一的抽象方法的简写
-
(方法的形参) -> {方法体,如果有返回值,一定要写返回值}
最全的省略:
如果目标方法只有一个参数,可以省略小括号
小括号里面的形参:类型可以省略
如果方法体只有一行,大括号可以省略
常见的lambda表达式接口
所有的lambda表达式常见的工具类都在java.util.function
接口名 | 抽象方法 | 含义 |
---|---|---|
Consumer | void accept(T t); | 消费者 |
Supplier | T get(); | 供应商,它是把这里面的数据,直接返回了 |
Function<T, R> | R apply(T t); | 方法(函数);第一个泛型是输入参数,第二个泛型是输出结果; 如何把第一个输入参数变成输出结果,这个是apply这个方法要实现的功能 |
Predicate | boolean test(T t); | 断言:泛型是输入数据;过滤:如果返回值是true,则在容器中保留,否则删除 |
3.3.数据流编程–**********
数据: 容器;
- 放的是什么(泛型)
- 大小
- Crud
需求:List里面存储的数据超级大;
- 找10个及格的分数;
- 循环之中满足需求,break;
- 容器的大小,无上限;
重要的接口:
接口名 | 含义 |
---|---|
Stream |
Stream接口的方法可以归为两类(算子就是方法)
方法的返回值还是Stream:(Transformaction算子)
方法的返回值不是Stream:(action算子)
数据流:
一根管子,一个数据会把所有的管子走完以后,再走第二个数据;
而不是所有的数据走完第一个管子以后,再一块走第二个管子
重点
所有的transformaction算子都是懒惰的;必须碰到action算子,才会一块执行;