- java lambda表达式可以代替匿名内部类,一个经典的例子是多线程的Thread类,构造函数中的runnable接口中的run方法可以用lambda表达式代替
之前:
@Test
public void oldRunable() {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("The old runable now is using!");
}
}).start();
}
之后:
@Test
public void runable() {
new Thread(() -> System.out.println("It's a lambda function!")).start();
}
- 可以将lambda表达式理解为匿名函数
- Lambda表达式能够让程序员的编程更加高效
- Lambda表达式的语法:
([Lambda参数列表,即形参列表]) -> - Lambda表达式的分类
- 无参无返回值
public class TestLambda {
public static void main(String[] args) {
new Thread(() -> System.out.println("Hello"));
}
}
- 有参无返回值
public class TestLambda {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("AAAAA");
list.add("BBBBB");
list.add("CCCCC");
list.add("DDDDD");
//形参的类型是确定的,可省略;只有一个形参,()可以省略;
list.forEach(t -> System.out.print(t + "\t"));
//或者更简洁的方法引用:list.forEach(System.out::println);
//打印结果:AAAAA BBBBB CCCCC DDDDD
}
}
- 有参有返回值
- 无参有返回值
- 每一个Lambda表达式能隐式的给函数式接口赋值,如runnable例子中lambda将打印方法传递给runnable接口的run()方法
- 自定义函数接口
package com.isea.java;
@FunctionalInterface
public interface IMyInterface {
void study();
}
package com.isea.java;
public class TestIMyInterface {
public static void main(String[] args) {
IMyInterface iMyInterface = () -> System.out.println("I like study");
iMyInterface.study();
}
}//这里的Lambda表达式将方法体赋值给函数式接口