无法在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;
}
答案 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();