2016-06-10 38 views
2

我怎麼能改寫以下使用lambda,而不是內部函數:我將如何改寫這個使用lambda

List<ExtraService> extraServices = product.getServices().getExtraService().stream() 
      .map(new Function<com.novasol.bookingflow.api.entities.products.ExtraService, ExtraService>() { 

       @Override 
       public ExtraService apply(com.novasol.bookingflow.api.entities.products.ExtraService es) { 
        ExtraService extraService = new ExtraService(); 
        extraService.setServiceId(es.getServiceID()); 
        extraService.setPriceUnitCode(es.getPriceUnitCode().intValue()); 
        extraService.setServiceGroup(es.getServiceGroup().intValue()); 
        extraService.setMaxUnits(es.getMaxUnits().intValue()); 

        return extraService; 
       } 

      }).collect(toList()); 
+2

另一個想法可能是有複製構造函數,然後'.map(ExtraService :: new)' –

+0

@AlexisC。有趣的一點 - 就像這個清潔,並會在這裏做一些實驗:-) –

回答

1

喜歡的東西

List<ExtraService> extraServices = product.getServices().getExtraService().stream() 
     .map(es -> { 
       ExtraService extraService = new ExtraService(); 
       extraService.setServiceId(es.getServiceID()); 
       extraService.setPriceUnitCode(es.getPriceUnitCode().intValue()); 
       extraService.setServiceGroup(es.getServiceGroup().intValue()); 
       extraService.setMaxUnits(es.getMaxUnits().intValue()); 

       return extraService; 
      } 

     ).collect(toList()); 

+0

謝謝,這正是我所期待的。 –

3

你有兩種選擇。

第一 - 在你的方法

Function<com.novasol.bookingflow.api.entities.products.ExtraService, ExtraService> toService = es -> { 
     ExtraService extraService = new ExtraService(); 
     extraService.setServiceId(es.getServiceId()); 
     extraService.setPriceUnitCode(es.getPriceUnitCode().intValue()); 
     extraService.setServiceGroup(es.getServiceGroup().intValue()); 
     extraService.setMaxUnits(es.getMaxUnits().intValue()); 
     return extraService; 
    }; 

    List<ExtraService> extraServices = product.getServices().getExtraService() 
      .stream() 
      .map(toService) 
      .collect(toList()); 

其次聲明函數 - 宣佈不進行轉換和使用方法引用到一個新的方法

private ExtraService toService(com.novasol.bookingflow.api.entities.products.ExtraService es) { 
     ExtraService extraService = new ExtraService(); 
     extraService.setServiceId(es.getServiceId()); 
     extraService.setPriceUnitCode(es.getPriceUnitCode().intValue()); 
     extraService.setServiceGroup(es.getServiceGroup().intValue()); 
     extraService.setMaxUnits(es.getMaxUnits().intValue()); 
     return extraService; 
} 

public void yourCurrentMethod() { 
     List<ExtraService> extraServices = product.getServices().getExtraService() 
      .stream() 
      .map(this::toService) 
      .collect(toList()); 
    ... 
} 
+0

謝謝你回答:-) –