2017-08-16 182 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