2017-06-27 32 views
-4

lambda函數在做什麼?函數<String,Consumer <String>> java 8

public class FunctionInterface { 
    public static void main(String[] args) { 

     Function<String, Consumer<Integer>> secondFunction = s -> x -> System.out.println(x); 

     System.out.println(secondFunction.apply("Text")); 
    } 
} 

上面的代碼是打印一些隨機值,如何使它打印文本?

+0

這是什麼問題? – LazerBanana

+0

這個函數返回消費者。爲了打印某些東西,你需要執行'secondFunction.apply(「」)。accept(10)' – esin88

+5

爲什麼你要編寫你不明白的代碼然後想知道爲什麼它沒有做到你想要的?只要做'消費者 consumer = x - > System.out.println(x); consumer.accept(「Text」);' - 爲什麼你需要一個函數返回消費者給定的字符串參數,你根本沒有使用? –

回答

4

您的變量secondFunctionFunction,需要String並返回Consumer<Integer>。在這一行:

System.out.println(secondFunction.apply("Text")); 

你在Function調用apply,它會返回一個Consumer<Integer>,然後打印對象,這將導致toString要在Consumer<Integer>對象上調用(然後該字符串會打印)。

它不會運行lambda表達式,這是您所期望的。試試這個:

// Call accept(123) on the consumer, which will execute the lambda 
secondFunction.apply("Text").accept(123); 
0

你說你想打印「文本」也許這是更容易? 您不需要使用函數返回使用者。我很困惑,目的是什麼?

Consumer<String> consumer = System.out::println; 
consumer.accept("Text"); 
+0

我正在試驗lambdas :) –

+0

哦,我明白了,希望你學到了一些東西。 – LazerBanana

相關問題