无法在Lambda函数Java 8中设置返回对象

时间:2018-06-07 04:32:04

标签: java

无法在lambda函数中设置返回对象。我收到错误" 在封闭范围内定义的局部变量readytoInsert必须是最终的或有效的最终" 。还有其他任何方式吗?

@PostMapping("/application/digital/v1/customers/{customerId}/neworder/")
 public MicroserviceResponse createOrder(@PathVariable("customerId") final 
   String customerId,@RequestBody final String requestBody, final MicroserviceResponse msResponse) throws MicroserviceException {

    JSONObject requestJSON;
    ObjectMapper mapper = new ObjectMapper();
    UserDTO readytoInsert = new UserDTO();
    try {
        requestJSON = new JSONObject(requestBody).getJSONObject("data");
        final String jsonData = requestJSON.toString();
        UserDTO orderSource = mapper.readValue(jsonData, UserDTO.class);
        orderSource.getOrderConfigs().forEach(item -> {
           readytoInsert = orderServiceValidator.validateOrderService(item, orderSource, orderSource.getOrderConfigs());
        });     
        **// I need to use the return object outside forEach loop, to perform other stuffs**
       } catch (Exception e) {
               e.printStackTrace();
    return msResponse;
}

方法返回DTO

public UserDTO validateOrderService(final UserDTO.OrderConfigs service,
        final UserDTO userDTO,
        final List<UserDTO .OrderConfigs> masterServiceList) {


   return userDTO;
 }

1 个答案:

答案 0 :(得分:0)

public boolean validateOrderService(final UserDTO.OrderConfigs service,
        final UserDTO userDTO,
        final List<UserDTO .OrderConfigs> masterServiceList) {

     //do validation
 }

如果需要,定义转换方法。

 public UserDTO convert(UserDTO dto){
      //do conversation
      return dto
    }

使用Java Stream API

UserDTO userDto = orderSource.getOrderConfigs()
             .stream()
             .filter(item->validateOrderService(item, orderSource, orderSource.getOrderConfigs()))
             .map(this::convert)
             .findFirst();