- 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表達式將方法體賦值給函數式接口