Java 8 中 Lambda 表達(dá)式的使用
在 Java 8 的版本更新中,增加了 Lambda 表達(dá)式支持 . 讓我們可以用更簡潔的代碼寫出完整的功能 . 下面就看看關(guān)于 Lambda 表達(dá)式的使用方式把 .
平時(shí)我們在使用 Thread 的時(shí)候 , 通常會(huì)傳入一個(gè) Runnable 的匿名內(nèi)部類 , 代碼會(huì)變得多 . 類似下面這樣 .
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("我用了6行");
}
}).start();
如果我們使用了 Java 8 的 Lambda 表達(dá)式 , 只需一行代碼就可完成 .
new Thread(() -> System.out.println("我用了一行") ).start();
這是在調(diào)用一個(gè)線程的時(shí)候試用 Lambda 的方式 . 在 Android 開發(fā)中 , 更多的是回調(diào)接口會(huì)用到 . 比如下面的這個(gè) .
checkBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(AboutActivity.this, "非 Lambel ",Toast.LENGTH_LONG).show();
}
});
在使用了 Lambda 之后 .
checkBtn.setOnClickListener(v1 -> Toast.makeText(AboutActivity.this, "是 Lambel ",Toast.LENGTH_LONG).show());
其中傳入的 View 變量 v1 可以任意起名字 , 但是推薦使用簡單命名 讓代碼更簡潔 .
總體格式大致如下:
參數(shù) -> 方法體
使用 Lambda 表達(dá)式還可以簡單快速的遍歷 List 集合 .
List<String> num = new LinkedList<>();
num.add("tt1");
num.add("tt2");
num.forEach(t-> System.out.println(t));
Lambda表達(dá)式 vs 匿名類
既然 Lambda 表達(dá)式即將正式取代 java 代碼中的匿名內(nèi)部類,那么有必要對(duì)二者做一個(gè)比較分析。一個(gè)關(guān)鍵的不同點(diǎn)就是關(guān)鍵字 this 。匿名類的 this 關(guān)鍵字指向匿名類,而 Lambda 表達(dá)式的 this 關(guān)鍵字指向包圍 Lambda 表達(dá)式的類。