用 lambda 替换 Anonymous inner class

Replace Anonymous inner class by lambda

我收到一个 Sonar 建议,将蛋白内部 class 更改为 lambda。

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;
 })