2017-08-16 88 views
1

我想一個簡單的Java功能轉換爲拉姆達8功能,不帶任何參數,然後調用它:lambda函數在Java中8,沒有參數和返回值

public int getMissing() { 
    return 0; 
} 

如何上面java8拉姆達轉換格式?

+1

https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html – pvg

回答

1

目前尚不清楚你打算用這個值做什麼,但發電機的形式() -> Int - 有點像,

IntStream.generate(() -> 0).limit(1).forEach(System.out::println); 

如果省略了limit(1)那麼你會得到零無限多,如果您需要保留訂單使用forEachOrdered(而不是forEach)。

4

你的情況是Supplier在Java中8

Supplier<Integer> supplier =() -> 0; 
System.out.println(supplier.get()); 
0

LAMBDA解決類似的問題,與匿名的類和接口HAVA的一種方法。 Java8具有預定義的函數接口(Function,Predicate,Consumer),它們都接受參數。您可以定義沒有參數的自定義功能界面。

1

你不直接將方法轉換爲lambda表達式。 Lambda是或多或少地實現了功能接口,而無需傳統匿名內部函數方法的開銷。

所以,如果你想把它作爲一個lambda來傳遞,你需要找到一個匹配的Functional Interface併爲它指定一個lambda。

在這種情況下,你必須不帶參數,返回一個int和可能的選擇之一是使用IntSupplier的方法:

IntSupplier supplier =() -> 0; 

現在,您可以通過調用它:

supplier.getAsInt() 

如果你想返回一個盒裝Integer,你需要使用一個通用的Supplier<T>

Supplier<Integer> supplier =() -> 0; 
supplier.get(); // 0