简体   繁体   English

用lambda代替Anonymous内部类

[英]Replace Anonymous inner class by lambda

I get a Sonar suggestion that change albuminous inner class to lambda. 我得到一个Sonar建议,将白蛋白内部类改为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;
            }
        }).

If you're using IntelliJ Idea, then pressing Alt + Enter/Return should automatically convert this to lambda for you. 如果您使用的是IntelliJ Idea,则按Alt + Enter/Return应该会自动将其转换为lambda。

If you've to do this manually, then it's as follows : 如果您必须手动执行此操作,则如下所示:

List<StsTxn> collect = externalPayments.stream().map( t -> {
    Payment = new Payment();
    //try-catch block
    return payment;
});

In Java-8, JVM will automatically look for the relevant method and override it but you can use this feature for functional interfaces only. 在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;
 })

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM