2016-05-10 102 views
0

您好,我剛開始學習Lambda表達式,如何使用Lambda表達式編寫此表達式?Lambda表達式if-else語句

public static void greaterThanFive(String str){ 
    if(str.length() > 5){ 
     System.out.println("String length is larger than 5 "); 
    }else{ 
     System.err.println("String length less than 5"); 
    } 

,如果它只是一個,if語句我可能只是這樣做:

Predicate<String> greaterThanFive = (s)-> s.length() > 5; 

但我真的不能找出當它是一個if-else語句。

+0

是否這樣? http://stackoverflow.com/a/22492361/1743880 – Tunaki

+0

我只是想要我發佈Lamda Expresion的例子。無法真正看到這與我發佈的示例有什麼關係。 –

+0

你能發表一個你想要的東西的真實例子嗎?它是'if(greaterThanFive.test(str)){...} else {...}'? – Tunaki

回答

0
Comparator<String> c = (String first, String second) -> { 
if (first.length() < second.length()) return -1; 
else if (first.length() > second.length()) return 1; 
else return 0; 
}; 

我相信這會回答你的問題。有關更多信息,請閱讀Java8,以確保不耐煩。它是一本非常好的書。

+0

嗯,是不是可以使用過濾器,而不是if語句? –

+0

我相信過濾器只能在一個流上調用,並且任何流上的中間操作都會導致另一個流。所以,我們可能達不到預期的結果(這是我的知識,我也在學習java)。 – Prudvinath

0

使用塊,您可以創建具有多個語句或大語句(如if-else)的lambda表達式。例如:

new Thread(() -> { // Btw, you can use java.lang.Runnable with a lambda 
    System.out.println("A wild NEW THREAD appeared!"); // :) 
    try { 
     Thread.sleep(5000); 
    } catch (InterruptedException e) {} 
    System.out.println("Enemy NEW THREAD ran away!"); 
}); 

這意味着所有你需要做的就是要罩住的if-else在拉姆達塊:

Consumer<String> greaterThanFive = (s) -> { 
    // ... 
}; 

注意,有塊後一個分號。

+0

比較比較像這樣的東西是否有比Predicate更方便的Funktional接口? –

+0

這取決於。在這裏,你應該使用'Consumer',因爲你試圖轉換成lambda表達式的方法返回'void'(我沒有看到編輯之前的返回類型:/)。 'Predicate'用於轉換返回'boolean'的方法。 – dorukayhan