Lambda表达式
- 格式: (参数列表)->{代码块}
- 前提: 函数式接口
使用套路:
- 分析是否可以使用Lambda表达式
- 如果可以使用,就直接写上()->{}
- 填充小括号中的内容–>和函数式接口中抽象方法的形参列表一致
- 填充大括号中的内容–>实现函数式接口抽象方法的方法体一致
省略规则:
- 小括号中参数类型可以省略
- 小括号中如果只有一个参数,那么小括号也可以省略
- 大括号中如果只有一条语句,那么大括号,分号,return都可以省略(一起省略)
方法引用:
- 判断是否可以使用方法引用替换Lambda表达式—>使用场景
- 如果可以使用,那么就得确定引入方法的类型
- 确定引入的方法的类型之后,根据引入格式引入该方法即可
方法的类型:
- 静态方法: 类名::方法名
- 构造方法: 类名::new
- 无参数成员方法: 类名::方法名
- 有参数的成员方法: 对象名::方法名
Stream流:
- 使用步骤: 获取流—>操作流---->收集结果
- Stream流api:
- forEach ,count , collect
- filter 、limit 、skip 、map 、concat …
案例示例
- 标准类
package com.java8New;
/**
* @Author: Mr.Xu
* @description: person类---标准类
* @Date: 2021/10/8 15:22
*/
public class person {
//成员变量
private String name;
//无参构造
public person() {
}
//有参构造
public person(String name) {
this.name = name;
}
//获取get/set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//重写toString方法
@Override
public String toString() {
return "person{" +
"name='" + name + '\'' +
'}';
}
}
- 测试类
package com.java8New;
import java.util.stream.Stream;
/**
* @Author: Mr.Xu
* @description: java8新特性 lambda表达式和stream流
* @Date: 2021/10/8 15:18
*/
public class Test {
public static void main(String[] args) {
//获取流
Stream<String> stream1 = Stream.of("张三三", "李四四", "王五", "赵六", "张七", "黑八爸爸");
Stream<String> stream2 = Stream.of("110", "119", "114", "116", "115");
//操作Steam流 ---> 过滤出姓张的元素
//完整版写法
// stream1.filter((String name)->{return name.startsWith("张");}).forEach((String name)->{System.out.println(name);});
//简化写法 使用lambda省略规则
// stream1.filter(name->name.startsWith("张")).forEach(name->System.out.println(name));
//简化写法 使用方法引用规则省略
// stream1.filter(name -> name.startsWith("张")).forEach(System.out::println);
// 操作stream2流--->转换Integer类型,并跳过前2个,打印输出
//完整版
// stream2.map((String str) -> { return Integer.parseInt(str);}).skip(2).forEach(System.out::println);
//简化版 使用方法引用的规则进行简化
stream2.map(Integer::parseInt).skip(2).forEach(System.out::println);
// 操作stream1流--->把姓名转换为Person对象,收集到集合中
//完整版
// List<person> list = stream1.map((String name) -> {return new person(name);}).collect(Collectors.toList());
//简化版
// List<person> list1 = stream1.map(person::new).collect(Collectors.toList());
//打印集合中的元素
// System.out.println(list);
// System.out.println(list1);
// 操作stream1流--->把姓名转换为姓名对应的字符长度,打印输出
//完整版
// stream1.map((String name)->{return name.length();}).forEach(System.out::println);
//简化版
stream1.map(String::length).forEach(System.out::println);
}
}
小白一枚,喜欢编程,以上内容纯手打,如有错误,请及时指正,谢谢!!!
欢迎下次再来ヾ(≧▽≦*)o
求三连(❁´◡`❁)