Java 用lambda替换匿名内部类
我得到一个声纳的建议,将蛋白类改为lambdaJava 用lambda替换匿名内部类,java,lambda,java-8,anonymous-class,Java,Lambda,Java 8,Anonymous Class,我得到一个声纳的建议,将蛋白类改为lambda List<StsTxn> collect = externalPayments.stream().map(new Function<PaymentExternal, Payment>() { @Override public Payment apply(PaymentExternal t) { Payment payment = new Pay
List<StsTxn> collect = externalPayments.stream().map(new Function<PaymentExternal, Payment>() {
@Override
public Payment apply(PaymentExternal t) {
Payment payment = new Payment();
try {
BeanUtils.copyProperties(payment, t);
} catch (IllegalAccessException | InvocationTargetException e) {
logger.error(e.getMessage(), e);
}
return payment;
}
}).
如果您使用的是IntelliJ Idea,则按Alt+Enter/Return会自动将其转换为lambda 如果必须手动执行此操作,则如下所示:
List<StsTxn> collect = externalPayments.stream().map( t -> {
Payment = new Payment();
//try-catch block
return payment;
});
在Java-8中,JVM将自动查找相关方法并覆盖它,但您只能将此功能用于功能接口
public Payment createPayment(
List<StsTxn> collect = externalPayments.stream().map(
t -> {
Payment payment = new Payment();
try {
BeanUtils.copyProperties(payment, t);
} catch (IllegalAccessException | InvocationTargetException e) {
logger.error(e.getMessage(), e);
}
return payment;
})
t->{Payment Payment=新付款;尝试{BeanUtils.copyPropertiespayment,t;}捕获非法访问异常|调用目标异常{logger.errore.getMessage,e;}返回付款;}?任何IDE都会建议,您使用哪一个?