我有一个我想要过滤的列表,然后返回一个带有金额总和的id地图:
val totalById = list
.filter { it.status == StatusEnum.Active }
.groupBy { it.item.id }
.mapValues { it.value.sumBy { it.amount } }
Run Code Online (Sandbox Code Playgroud)
"it.amount"是BigDecimal,但看起来sumBy只是Int.
对于Java 8,它将是:
Collectors.groupingBy(i-> i.getItem().getId(), Collectors.mapping(Item::getAmount, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))))
在Kotlin有办法吗?
我正在使用 spring Rest 构建 API 并尝试验证输入参数,如下所示:
@RequestMapping("/myUrl")
@RestController
@Validated
public class MyController {
@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "getSomething", method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE})
public myResponse getMarketResult(
@RequestParam @NotNull @NotBlank @NotEmpty String inputParam) {
//...my implementation
}
}
Run Code Online (Sandbox Code Playgroud)
验证确实适用于所有这些场景(空、空白、空)。如果为 null,则抛出 MissingServletRequestParameterException;如果为空白/空,则抛出 ConstraintViolationException。
控制器建议:
@ControllerAdvice
public class ControllerValidationHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(NestedServletException.class)
public ResponseEntity<Object> processValidationError(NestedServletException ex, HttpStatus status, WebRequest request) {
// my implementation
}
@ExceptionHandler(ConstraintViolationException.class)
public ResponseEntity<Object> processValidationError(ConstraintViolationException ex, HttpStatus status, WebRequest request) {
// my implementation
}
@Override
protected ResponseEntity<Object> …Run Code Online (Sandbox Code Playgroud)