JDK8新特性—Lambda表达式
1、什么是Lambda表达式
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
2、什么是函数式接口
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
函数式接口可以被隐式转换为 lambda 表达式。
3、Lambda表达式使用案例
3.1、Lambda表达式基本语法
函数式接口 变量名 = (参数1,参数2,....) -> {
//具体实现
}
3.2、实例
实例1:
//匿名内部类
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Running....");
}
};
new Thread(runnable).start();
/*
复习线程调用中的run()和start()的区别:
start():调用start()方法执行时,会使线程出于就绪状态。在JVM调用执行的过程中通过调用线程类的run()方法来启动线程
并完成相应操作。即start()可以异步调用run()方法实现多线程运行
run():调用run()方法执行时,会被当作一个普通的函数调用,无法实现多线程。
*/
//lambda表达式实例
Runnable runnable1 = () -> {
System.out.println("hello,lambda!");
};
new Thread(runnable1).start();
//进阶
new Thread(() -> {
System.out.println("hello,lambda!");
}).start();
//与上面一样,当方法体中只含有一条语句时,大括号可以省去
new Thread(() -> System.out.println("hello,lambda!")).start();
实例2
Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
};
TreeSet<String> treeSet = new TreeSet<>(comparator);
Comparator<String> comparator1 = ((String o1, String o2) -> o1.length()-o2.length());
TreeSet<String> treeSet1 = new TreeSet<>(comparator1);
TreeSet<String> treeSet2 = new TreeSet<>((o1, o2) -> o1.length()-o2.length());
4、使用lambda表达式的注意事项
Lambda引入了新的操作符:-> (箭头操作符) , ->将表达式分成两部分
左侧: (参数1,参数2.)表示参数列表;
右侧: {}内部是方法体
1、形参列表的数据类型会自动推断;
2、如果形参列表为空,只需保留() ;
3、如果形参只有1个,()可以省略,只需要参数的名称即可;
4、如果执行语句只有1句,且无返回值,{}可以省略, 若有返回值,则若想省去{},则必须同时省略return,且执行语
句也保证只有1句;
5、1ambda不会生成一个单独的内部类文件;
6、lambda表达式若访问了局部变量,则局部变量必须是fina1的,若是局部变量没有加fina1关键字,系统会自动添
加,此后在修改该局部变量,会报错。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/147358.html