JDK8新特性—Lambda表达式

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关键字,系统会自动添
加,此后在修改该局部变量,会报错。

你可能感兴趣的:(Java进阶自学笔记,java)