gpt4 book ai didi

java - 使用流转换 foreach 循环

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:33:09 25 4
gpt4 key购买 nike

需要一些帮助来使用 Stream API 转换此循环:

protected ResponseEntity<Object> handleMethodArgumentNotValid( MethodArgumentNotValidException ex,
HttpHeaders headers, HttpStatus status, WebRequest request ) {

Map<String, Set<String>> fieldErrorWithMessages = new HashMap<String, Set<String>>();
List<FieldError> fieldErrors = ex.getBindingResult().getFieldErrors();
Set<String> messages;
for ( FieldError error : fieldErrors ) {
String currentField = error.getField();
String currentErrorMessage = message.getMessage( error.getCodes()[0], null, locale );
if ( !fieldErrorWithMessages.containsKey( currentField ) ) {
messages = new HashSet<String>();
messages.add( currentErrorMessage );
fieldErrorWithMessages.put( currentField, messages );
} else {
if ( !fieldErrorWithMessages.get( currentField ).contains( currentErrorMessage ) ) {
fieldErrorWithMessages.get( currentField ).add( currentErrorMessage );
}
}
}
.....
}

目标是将每个字段及其错误消息分组。错误消息存储在 message.properties 文件中。此代码按预期工作,但我想知道是否可以使用 Stream API 使其更简洁。像这样的东西:

Map<String, Set<String>> fieldErrorWithMessages =fieldErrors.stream().collect( Collectors.groupingBy( FieldError::getField,/*something returnig a set of messages stored in messages.properties for each field*/ ) );

请注意,为了检索消息,我使用了 FieldError.getCodes() 的第一个代码,请参见上文:error.getCodes()[0]

谢谢

最佳答案

如果没有流,实际上还有很大的空间可以减少,但我会切入正题:

Map<String, Set<String>> fieldErrorWithMessages = ex.getBindingResult()
.getFieldErrors()
.stream()
.collect(Collectors.groupingBy(
FieldError::getField,
Collectors.mapping(
error -> message.getMessage(error.getCodes()[0], null, locale),
Collectors.toSet())));

关于java - 使用流转换 foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49662221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com