2017-04-21 69 views
2

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

private static final Function<String, Integer> EmpIdToInt = (id) -> { 
    return Integer.valueOf(ACI.generate("emp",id).revealId().intValue()); 
}; 

在Java 8中编写此函数是否有更好的方法?

任何人都可以帮忙吗?

+3

您正在使用8,有什么问题? – ChiefTwoPencils

+0

在java 8中编写这个函数有没有更好的方法? – zubairm

+2

'Integer.valueOf()'是不必要的。 – shmosel

回答

3

有没有更好的方法在java 8编写这个函数?

你已经在使用Java 8的功能和是的,你可以使代码通过删除
()短,因为只有一个PARAM和删除{},因为只有一个执行的语句。

,你可以把它简化,像这样:

private static final Function<String, Integer> EmpIdToInt = id -> Integer.valueOf(ACI.generate("emp",id).revealId().intValue()); 
2

:我带走private static final打印页面。

IFrevealId是一个整数,你可以简化为:

Function<String, Integer> EmpIdToInt = id -> ACI.generate("emp",id).revealId(); 

ORrevealId不是一个整数,而是一个int会自动装箱到Integer,这样你就可以删除该Integer.valueOf方法调用:

Function<String, Integer> EmpIdToInt = id -> ACI.generate("emp",id) 
               .revealId().intValue(); 

您可以使用curry方法链接功能一步一步:

:类X就是revealId方法声明和类Y就是intValue方法声明。

// 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

我认为它是安全的假设'Y'是一个'Number'。 – shmosel

+0

@shmosel也许我们是对的,但我把它留给了思维的OP。 –

+1

为了有点迂腐,我认为你展示的是部分应用而不是曲风。 – shmosel