首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换为Java 8函数

转换为Java 8函数
EN

Stack Overflow用户
提问于 2017-04-21 12:09:30
回答 2查看 122关注 0票数 2

如何使用Java 8编写以下函数?

代码语言:javascript
复制
private static final Function<String, Integer> EmpIdToInt = (id) -> {   
    return Integer.valueOf(ACI.generate("emp",id).revealId().intValue());
};

在Java8中有没有更好的方法来编写这个函数?

有人能帮上忙吗?

EN

回答 2

Stack Overflow用户

发布于 2017-04-21 12:17:29

在Java8中有没有更好的方法来编写这个函数??

您已经在使用java8的特性,是的,您可以通过删除

( ),因为只有一个参数,删除{ },因为只有一条执行语句。

你可以这样简化它:

代码语言:javascript
复制
private static final Function<String, Integer> EmpIdToInt = id -> Integer.valueOf(ACI.generate("emp",id).revealId().intValue());
票数 3
EN

Stack Overflow用户

发布于 2017-04-21 14:35:47

注意:我取走了private static final来打印页面。

如果你的revealId是一个整数,你可以简化为:

代码语言:javascript
复制
Function<String, Integer> EmpIdToInt = id -> ACI.generate("emp",id).revealId();

revealId不是整数,但int将自动装箱到Integer时,因此您可以删除Integer.valueOf方法调用:

代码语言:javascript
复制
Function<String, Integer> EmpIdToInt = id -> ACI.generate("emp",id)
                                                .revealId().intValue();

您可以使用curry方法逐步链接函数:

注意:X类是声明revealId方法的地方,Y类是声明intValue方法的地方。

代码语言:javascript
复制
// revealId is an Integer
Function<String, Integer> EmpIdToInt = curry(ACI::generate, "emp")
                                      .andThen(X::revealId);
// revealId is not an Integer
Function<String, Integer> EmpIdToInt = curry(ACI::generate, "emp")
                                      .andThen(X::revealId)
                                      .andThen(Y::intValue);

private static <T, A, R> Function<T, R> curry(BiFunction<A, T, R> it, A arg) {
    return other -> it.apply(arg, other);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43533806

复制
相关文章

相似问题

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