Java 8中的Lambda函数,没有参数和返回值

时间:2017-08-16 04:02:49

标签: java lambda java-8

我想将一个简单的Java函数转换为一个没有任何参数的lambda 8函数,然后调用它:

public int getMissing() {
  return 0;
}

如何将上面的内容转换为java8 lambda格式?

6 个答案:

答案 0 :(得分:9)

您的案例类似于Java 8中的Supplier

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

答案 1 :(得分:1)

不清楚您打算如何处理该值,但生成器的格式为() -> Int - 类似于

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

如果省略limit(1),那么如果您需要保留使用forEachOrdered(而不是forEach)订单,则会获得无限数量的零。

答案 2 :(得分:1)

您并没有直接将方法转换为lambdas。 Lambdas是动态创建的功能接口的或多或少的实现,没有经典的匿名内部函数方法的开销。

因此,如果您想将其作为lambda传递,则需要找到匹配的Functional Interface并为其分配lambda。

在这种情况下,您有一个不带参数的方法返回int,其中一个可能的选择是使用IntSupplier

IntSupplier supplier = () -> 0;

现在,您可以通过执行以下操作来调用它:

supplier.getAsInt()

如果您想要退回装箱Integer,则需要使用通用Supplier<T>

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

答案 3 :(得分:0)

要获得lambda函数,您不需要输入任何内容或输出任何内容。

java代码的入口点需要具有某种格式,如文档中所述。

http://docs.aws.amazon.com/lambda/latest/dg/get-started-step4-optional.html

您可以使用任何代码转换器转换java代码,按照上面的说明进行入口点,上传和调用外部URL(通过api网关)或使用aws控制台中的测试按钮进行测试。

答案 4 :(得分:0)

Lambda解决了一个方法带有匿名类和接口的问题。 Java8具有预定义的功能接口(Function,Predicate,Consumer),它们都接受参数。您可以定义没有参数的自定义功能界面。

答案 5 :(得分:0)

定义以下内容:

public interface Function<T> {
    public T apply();
}

有了这个,你可以做类似的事情

methodThatAcceptsFunction(() -> { getMissing(); });