一.Lambda表达式
作用:简化内部类
语法:()->{}
需要参数实参为Lambda表达式,形参就必须为一个函数式接口作为形参
Lambda——>行为当作参数传递
二.函数式接口
常用四大内置函数式接口:java.util.function
Consumer<T>消费型接口
void accept(T t)有来无回
Function<T,R>函数式接口
R apply(T t)
Supplier<T>供给型结构
T get()
Predicate<T>断言型接口
boolean test(T t)
消费性只有参数没有返回值
函数式类型和断言型都可以有一到两个参数有返回值,区别是函数式接口的返回值可以是任意类型,断言型返回值是bollean类型
供给型接口没有参数,只有返回值
三.方法引用 ::
简化Lambda表达式
是Lambda表达式的另一种表现形式
使用前提:
1.当Lambda表达式的Lambda体中的实现已经存在另外一个方法实现了,只需要在Lambda体中调用另一个方法->可以通过方法引用的写法直接引用那个方法
2.Lambda重写的抽象方法的参数列表与返回值对应内部所引用方法的参数列表与返回值
3.Lambda返回值与内部所调用方法的方法直接对应,Lambda的参数列表的第一个参数作为内部调用成员方法的对象存在,Lambda的第二到多个参数直接匹配内部所调用方法的参数列表存在
分类:
对象::成员方法(12)
类名::静态方法(12)
类名::成员方法(13)
函数式接口作为形参,Lambda表达式作为实现,把行为作为参数传递
四.Stream——操作数据源所产生的元素序列
关注流式运算,不是传输与储存
io流关注数据的传输
数组和集合关注数据的储存
注意:
1.Stream是一次性的流,一旦使用过就不能重复使用
2.Stream的操作不会影响数据源中的数据
3.延迟执行|惰性加载:当获取终止行为的时候才会执行中间操作
使用步骤:
1.获取Stream流
2.中间行为:一系列的流式操作
3.终止行为
创建Stream的方式:
1.Collection Stream<E> stream()
2.Arrays stream()
3.Stream.of(值列表)
注意:中间操作都会返回一个持有结果的新的流
流式中间操作:
1.过滤 Stream<T> filter(Predicate<? super T> predicate);
2.去重 Stream<T> distinct()
3.截取 Stream<T> limit(long maxSize)
4.跳过 Stream<T> skip(long)
5.排序 sorted() | sorted(Comparator<? super T> comparator)
6.映射 map(Function) :接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。
终止行为:
规约
查找
匹配
收集
五.线程——执行的顺序流
多线程:多任务执行,多路径执行
两者的区别:是否需要多任务,多路径执行
三高:高性能,高可用,高并发
创建线程的方式:
1.继承Thread类,重写run()
2.实现Runnable接口,重写run()
接口可以多实现
实现资源共享
3.实现juc包下Callable接口,重写call()