java Lambda表达式
温馨提示:
本文最后更新于 2023年05月11日,已超过 517 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
Lambda表达式
Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。
JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。
快速上手
先看一个不用Lambda表达式的例子:
public static void main(String[] args) throws Exception {
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("hello world");
}
};
runnable.run();
}
在之前,如果我们需要运行一个线程时,需要实现个匿名类方式运行
Lambda表达式:
public static void main(String[] args) throws Exception {
Runnable runnable = ()->System.out.println("hello world");
runnable.run();
}
可以看出,代码精简了很多,直接通过Lambda表达式实现了带有run方法的匿名类
在我学习Lambda表达式的时候,总有一个疑问:为什么Lambda表达式可以知道它定义的就是run这个方法呢?如果一个接口有多个方法,Lambda表达式是怎么知道是实现的哪个方法的呢?
很明显,如果是多个方法,Lambda表达式就会出错,所以本身Lambda表达式就是用于函数式接口
的
函数式接口
只包含一个抽象方法的接口,称为函数式接口。
这个接口可以使用@FunctionalInterface声明,如果不满足条件,则会报错,可以通过这个方式来判断是否为函数式接口
可以看另一篇文章:https://www.php20.cn/article/423
语法格式
Lambda通过 3个部分的语法结构来实现:
(x) -> {}
- (x) 第一部分为参数,表示需要声明定义传入的参数,类似于方法的形参声明,如果没有参数可以省略
- -> Lambda表达式 操作符
- {} 语句块,表示具体实现的方法代码,如果只有一行可以省略{}
语法格式一,有参数,有返回值,多行代码
public static void main(String[] args) throws Exception {
Comparator<Integer> comparator = (Integer x,Integer y) -> {
System.out.println("函数式接口");
return Integer.compare(x, y);
};
System.out.println(comparator.compare(1,2));
}
语法格式二,无参数,无返回值,一行语句
public static void main(String[] args) throws Exception {
Runnable runnable = ()->System.out.println("hello world");
runnable.run();
}
一行语句可以省略
{}
语法格式三,有一个参数
public static void main(String[] args) throws Exception {
Consumer<String> func = s -> System.out.println(s);
func.accept("hello world");
}
只有一个参数时,可以省略小括号
语法格式四,一行语句有返回值
public static void main(String[] args) throws Exception {
Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y);
System.out.println(comparator.compare(1,1));
}
只有一行语句时,可以省略return,直接返回
语法格式五,可以省略形参类型,会自己实现类型推断
public static void main(String[] args) throws Exception {
Comparator<Integer> comparator = (x, y) -> {
System.out.println("函数式接口");
return Integer.compare(x, y);
};
System.out.println(comparator.compare(1,2));
}
正文到此结束
- 本文标签: 编程语言 java
- 本文链接: https://www.php20.cn/article/424
- 版权声明: 本文由仙士可原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权