首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8中没有参数和返回值的Lambda函数

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

Stack Overflow用户
提问于 2017-08-16 12:02:49
回答 6查看 11.4K关注 0票数 12

我想把一个简单的Java函数转换成一个不带任何参数的lambda 8函数,然后调用它:

代码语言:javascript
复制
public int getMissing() {
  return 0;
}

如何将上面的代码转换为java8 lambda格式?

EN

回答 6

Stack Overflow用户

发布于 2017-08-16 12:09:59

您的情况与Java8中的Supplier类似

代码语言:javascript
复制
 Supplier<Integer> supplier = () -> 0;
 System.out.println(supplier.get());
票数 21
EN

Stack Overflow用户

发布于 2017-08-16 14:15:14

实际上,您并没有直接将方法转换为lambdas。Lambda或多或少是动态创建的函数接口的实现,没有传统匿名内部函数方法的开销。

因此,如果您希望将其作为lambda传递,则需要找到一个匹配的函数接口,并为其分配一个lambda。

在本例中,您有一个不带参数的方法,它返回一个int,其中一个可能的选择是使用IntSupplier

代码语言:javascript
复制
IntSupplier supplier = () -> 0;

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

代码语言:javascript
复制
supplier.getAsInt()

如果要返回装箱的Integer,则需要使用通用Supplier<T>

代码语言:javascript
复制
Supplier<Integer> supplier = () -> 0;
supplier.get(); // 0
票数 3
EN

Stack Overflow用户

发布于 2017-08-16 12:08:55

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

代码语言:javascript
复制
IntStream.generate(() -> 0).limit(1).forEach(System.out::println);

如果你省略了limit(1),那么你将得到一个无限多的零,如果你需要保持顺序,使用forEachOrdered (而不是forEach)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45704937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档