1.JDK1.8新特性之接口
JDK1.8之前的接口不可以有方法体,但从JDK1.8开始,接口中的方法可以带有方法体
为什么要添加这个特性?
接口就是为了定义一个标准,这个标准要求所有的实现类实现这些抽象方法。
但存在某些方法,所有的实现类代码都是一样的,索性就把这些代码挪到接口中。
使用的方法?
通过default来修饰这个方法
public interface IAnimal{
void run();
default void eat(){
System.out.println("吃");
}
}
实现类可以不必实现这个方法
public class Person implements IAnimal {
@Override
public void run() {
System.out.println("人跑");
}
}
测试
public class Test {
public static void main(String[] args) {
IAnimal a = new Person();
a.eat();
a.run();
}
}
测试效果如图:
2.JDK1.8新特性之lambda表达式
lambda效果与匿名函数的效果类似
先决条件
目标方法的参数是一个接口
接口中只有一个抽象方法,且这个抽象方法不是Object里面的方法
接口最好顶一个注解:@FunctionalInterface
使用方法
(方法的形参) -> {方法体,如果有返回值,一定要写返回值}
如果目标方法只有一个参数,可以省略小括号
小括号里面的形参:类型可以省略
如果方法体只有一行,大括号可以省略
实战代码
Thread t = new Thread(() -> System.out.println("qazxswedc"));
t.start();
Thread t = new Thread(() -> {
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
});
t.start();
接口名 | 抽象方法 | 含义 |
---|---|---|
Consumer< T > | void accept(T t) | 消费者,无返回值 |
Supplier< T > | T get(); | 供应商,它是把数据,直接返回了 |
Function<T, R> | R apply(T t); | T:输入类型,R:输出类型,将传入的数据转变成输出的结果 |
Predicate< T > | boolean test(T t); | 断言:泛型是输入数据的类型;过滤:如果返回值是true,则在容器中保留,否则删除 |
3.JDK1.8新特性之数据流编程
分类
方法的返回值还是Stream:(Transformaction算子)
方法的返回值不是Stream:(action算子)
介绍
数据流编程的处理就像是像一根带阀门的管子里注水,每次处理就是一道阀门,水流就是数据,
只有一个数据处理完成之后,才会处理另一份数据
算子介绍
transformaction算子
1.Stream filterStream = souStream.filter( (t) -> t > 50);
过滤数据,只保留值大于50的数据
2:Stream mapStream = souStream.map( (t) -> t + “”);
把输入参数,经过一个方法变成另外一个参数
3: Stream flatMapStream = souStream.flatMap( t -
{
String[] splitList = t.split("-");
List tempList = Arrays.asList(splitList);
return tempList.stream() ;
});
把输入参数,经过一个方法变成另外一个参数(stream类型)
4:Stream stream = souStream.distinct()
去重
5:Stream stream = souStream.limit(2);
取前几条数据
6:Stream stream = souStream.skip(2);
跳过前几条数据
7:Stream stream = souStream.sorted();
排序(升序)
action算子
1:stream.forEach( t -> System.out.println(t));
循环
2:Object[] arrays = stream.toArray()
将数据转为数组
3:long count = stream.count()
统计数量
4:Optional findFirst = stream.findFirst()
查找第一个元素
5:Iterator iterator = stream.iterator()
转换成迭代器
6:Optional maxOption = stream.max( (t1,t2) -> t1 - t2)
最大值,排序后获取最后一个
7::Optional minOption = stream.min( (t1,t2) -> t1 - t2)
最小值,排序后获取第一个
8:Optional reduce = stream.reduce((t1, t2) -> t1 + t2);
缩减数据,将第一个数据,第二个数据作为第一个参数,第二个参数传进去进行处理,得到一个数据,将这个数据作为第一个参数,第三个数据作为 第二个参数传入进行第二次处理,以此类推