一、優化線程
//JDK1.7及以前創建
Thread thread = new Thread(
new Runnable() {
@Override
public void run() {
System.out.println("原始線程");
}
}
);
//JDK1.8之後 Lambda創建
Thread thread2 = new Thread(() -> {
System.out.println("Lambda創建線程");
});
二、優化集合操作
Lambda裏面的核心就是 () -> 這個操作,那麼具體是什麼意思,我們看看操作集合的例子
List<String> list = new ArrayList<>();
list.add("A1");list.add("A2");list.add("Z1");
list.add("Z2");list.add("B1");list.add("B2");
List<String> result = new ArrayList<>();
/**
* .stream對集合的操作
* .filter()過濾
* (x) -> 代表集合中的對象(集合中的對象,實體類則會附帶一些方法)
* !x.contains("Z") 是需要過濾的表達式,這裏相當於 "if ()" 括號中的內容
* .collect(Collectors.toList()); 將返回的結果集轉換成List
* */
result = list.stream().filter(
(x)-> !x.contains("Z")
).collect(Collectors.toList());
// 結果集:[A1, A2, B1, B2]
System.out.println(result.toString());
由此可知, ()-> 則是操作內容中的一個對象
當然你還可以使用另外一種語法遍歷集合
result.forEach(System.out::println);
結果是,非常簡潔
三、函數式接口
首先是一個磚(Brick)接口,有一個搬(move)方法,需要一個類型(type)指定磚的類型
然後定義一個工人(Worker)類,有個工作(Work)方法,傳入一個磚(Brick),至於類型並不是自己能決定,需要交給老闆決定,方法進行 搬磚: 然後執行搬磚方法 然後搬完了
最後來一個老闆(main)開始指定一個工人(Worker worker = new Worker();)
然後通過worker.work((type)-> System.out.println("紅 " + type)); 讓工人搬紅磚。
通過該結構很清晰的反應了一個由老闆自由分配工人搬什麼磚的列子,同時程序接口也很清晰,這就是表達式之美!!
interface Brick {
void move(String type);
}
class Worker{
public void work(Brick brick){
System.out.println("搬磚:");
brick.move("磚");
System.out.println("搬完了!");
}
public static void main(String[] args) {
Worker worker = new Worker();
//工人開始幹活 (磚) -> 要搬 (紅)磚
worker.work((type)-> System.out.println("紅 " + type));
worker.work((type)-> System.out.println("瓷 " + type));
}
}