目录
Lambda表达式
创建线程执行任务的方式:
1.实现Runnable接口
2.匿名内部类
// 需求: 创建并启动线程,执行打印100次HelloWorld
public class Test {
public static void main(String[] args) {
MyRunnable mr = new MyRunnable();
new Thread(mr).start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i <= 100; i++) {
System.out.println("这是第"+i+"次打印HelloWorld===");
}
}
}).start();
}
}
以上2种方式,面向对象编程---其实都必须依靠Runnable的实现类对象来传递任务给线程执行
3.Lambda方式
函数式编程---不依靠Runnable的实现类对象,直接传入线程任务代码
new Thread(()->{
System.out.println("线程任务代码1.....");
}).start();
Lambda表达式没有特殊功能,就是用来简化代码的
1.Lambda的使用前提条件
1.接口必须是函数式接口(
接口中有且仅有一个抽象方法,
可以使用@FunctionalInterface注解进行标识)
2.标准格式
格式: `(形参列表)->{代码块}`
1.小括号中形参列表与函数式接口中抽象方法的形参列表一致(形参名可以不一致,但形参类型,顺序,个数必须一致);
2.->固定写法,表示指向动作,代表小括号中的参数传递到大括号中使用;
3.大括号中的代码其实就是和之前重写函数式接口中抽象方法的方法体一致.
2.省略规则
1.Lambda表达式小括号中的参数类型可以省略不写
2.如果Lambda表达式小括号中只有一个参数,那么小括号也可以省略不写
3.如果Lambda表达式大括号中只有一条语句,那么大括号,return关键字,以及语句分号都可以省略(必须一起省略)
Stream流
1.Stream流特点
1.Stream流是一次性的,不能重复使用
2.Stream流不会存储数据
3.Stream流不会修改数据源
4.Stream流搭建的函数模型,只有终结方法存在,前面的延迟性方法才会执行。
2.获取Stream流
1.Collection接口的默认方法stream()---
1.通过单列集合获取 集合名.stream()/
2.通过双列集合获取 keys.stream();/values.stream()
2.Stream<T>接口的静态方法of(T... args)----
通过数组获取流 -----Stream.of(.......)
3.收集Stream流结果
1.收集到数组中 Object to Array()----stream.toArray();
2.收集到集合
set集合:stream.collect(Collectors.toSet())
list集合:stream.collect(Collectors.toList())
4.常用方法
分为终结方法和非终结方法
终结方法:返回值类型不再是Stream接口的方法,
不
支持链式调用。
非终结方法(函数拼接方法):返回值类型仍然是Stream接口的方法,支持链式调用。
终结:
count --- 统计个数
foreach --- 逐一处理
非终结:
filter --- 过滤
limit --- 取前n个
skip --- 跳过前n个
map --- 映射
concat --- 组合