[英]What does the arrow operator, '->', do in Java?
在瀏覽一些代碼時,我遇到了箭頭運算符,它到底是做什么的? 我以為 Java 沒有箭頭操作符。
return (Collection<Car>) CollectionUtils.select(listOfCars, (arg0) -> {
return Car.SEDAN == ((Car)arg0).getStyle();
});
詳細信息:Java 6、Apache Commons Collection、IntelliJ 12
更新/回答:事實證明,IntelliJ 12 支持 Java 8,它支持 lambda,並且正在“折疊”謂詞並將它們顯示為 lambda。 下面是“未折疊”的代碼。
return (Collection<Car>) CollectionUtils.select(listOfCars, new Predicate() {
public boolean evaluate(Object arg0) {
return Car.SEDAN == ((Car)arg0).getStyle();
}
});
這是新 lambda 表達式語法的一部分,將在 Java 8 中引入。有幾個在線教程可以掌握它,這里有一個鏈接。 基本上, ->
將參數(左側)與實現(右側)分開。
使用 lambda 表達式的一般語法是
(Parameters) -> { Body }
其中->
分隔參數和 lambda 表達式主體。
參數用括號括起來,這與方法相同,lambda 表達式主體是用大括號括起來的代碼塊。
當您想要實現功能接口時,這也很有用
Runnable r = ()-> System.out.print("Run method");
相當於
Runnable r = new Runnable() {
@Override
public void run() {
System.out.print("Run method");
}
};
我相信,這個箭頭的存在是因為你的 IDE。 IntelliJ IDEA 用一些代碼來做這樣的事情。 這稱為代碼折疊。 您可以單擊箭頭將其展開。
這是一個 lambda 表達式。
這意味着,在 listOfCars 中,arg0 是該列表的項目之一。 他將要使用該項目,因此->,括號內的任何內容。
在此示例中,他將返回符合條件的汽車列表
Car.SEDAN == ((Car)arg0).getStyle();
在 java 8 中添加了用於 lambda 表達式的新運算符
Lambda 表達式是方法編寫的簡寫方式。
間接用於實現功能接口
主要語法:(參數)-> { 語句; }
您應該了解一些編寫有效 lambda 表達式的基本規則。
當您想從非 UI 線程更新您的 UI 時,使用 runOnUiThread()。 例如,如果您想從后台線程更新您的 UI。 你也可以使用 Handler 來做同樣的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.