簡體   English   中英

Java 中的箭頭運算符“->”有什么作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM