在 Java 中迭代 Map 时如何在内部迭代和分配 List 对象的值
How to iterate and assign values of List object internally when Iterating over Map in Java
public List<ErrorMessage> getErrorMessageDetails(ValidationResult validationResult, String severity) {
Map<List<String>, List<String>> errorObjectsMap = new HashMap<>();
//errorCode= some values in List of strings
//errorMessage= some values in List of strings
errorObjectsMap.put(errorCode, errorMessage);
List<ErrorMessage> errorMessageList = new ArrayList<>();
for (Map.Entry<List<String>, List<String>> pair : errorObjectsMap.entrySet()) {
List<String> errorCodeMsg = pair.getKey() == null ? new ArrayList<>() : pair.getKey();
List<String> errorMsg = pair.getValue() == null ? new ArrayList<>() : pair.getValue();
errorMessageList.add(new ErrorMessage(errorCodeMsg.get(0), errorMsg.get(0)));
// So in above line of code i want to iterate both list k,v and use its keys and values to create list of List<ErrorMessage> errorMessageList dynamically without using index of lists
}
return errorMessageList;
}
建议请参考以上java方法
有人可以帮忙编写逻辑以在 java 中以最简洁的方式动态迭代吗?
提前谢谢你:)
所提供的方法不使用任何输入参数 validationResult
和 severity
,它表明映射仅包含一个条目。
但是,要简单地构建错误消息列表,可以使用 Stream API 将映射条目流转换为 ErrorMessage
列表,其中映射条目中的列表由IntStream
和 flatMap
提供的索引用于连接所有条目的错误消息:
public List<ErrorMessage> getErrorMessageDetails(ValidationResult validationResult, String severity) {
Map<List<String>, List<String>> errorObjectsMap = new HashMap<>();
//errorCode= some values in List of strings
//errorMessage= some values in List of strings
errorObjectsMap.put(errorCode, errorMessage);
// assuming there are more entries
return errorObjectsMap.entrySet()
.stream() // Stream<Map.Entry<List<String>, List<String>>>
.filter(e -> e.getKey() != null && e.getValue() != null
&& !e.getKey().isEmpty() && !e.getValue().isEmpty()
)
.flatMap(e -> IntStream.range(0, Math.min(e.getKey().size(), e.getValue().size()))
.mapToObj(i -> new ErrorMessage(
e.getKey().get(i), e.getValue().get(i)
)) // Stream<ErrorMessage>
)
.collect(Collectors.toList());
}
public List<ErrorMessage> getErrorMessageDetails(ValidationResult validationResult, String severity) {
Map<List<String>, List<String>> errorObjectsMap = new HashMap<>();
//errorCode= some values in List of strings
//errorMessage= some values in List of strings
errorObjectsMap.put(errorCode, errorMessage);
List<ErrorMessage> errorMessageList = new ArrayList<>();
for (Map.Entry<List<String>, List<String>> pair : errorObjectsMap.entrySet()) {
List<String> errorCodeMsg = pair.getKey() == null ? new ArrayList<>() : pair.getKey();
List<String> errorMsg = pair.getValue() == null ? new ArrayList<>() : pair.getValue();
errorMessageList.add(new ErrorMessage(errorCodeMsg.get(0), errorMsg.get(0)));
// So in above line of code i want to iterate both list k,v and use its keys and values to create list of List<ErrorMessage> errorMessageList dynamically without using index of lists
}
return errorMessageList;
}
建议请参考以上java方法
有人可以帮忙编写逻辑以在 java 中以最简洁的方式动态迭代吗?
提前谢谢你:)
所提供的方法不使用任何输入参数 validationResult
和 severity
,它表明映射仅包含一个条目。
但是,要简单地构建错误消息列表,可以使用 Stream API 将映射条目流转换为 ErrorMessage
列表,其中映射条目中的列表由IntStream
和 flatMap
提供的索引用于连接所有条目的错误消息:
public List<ErrorMessage> getErrorMessageDetails(ValidationResult validationResult, String severity) {
Map<List<String>, List<String>> errorObjectsMap = new HashMap<>();
//errorCode= some values in List of strings
//errorMessage= some values in List of strings
errorObjectsMap.put(errorCode, errorMessage);
// assuming there are more entries
return errorObjectsMap.entrySet()
.stream() // Stream<Map.Entry<List<String>, List<String>>>
.filter(e -> e.getKey() != null && e.getValue() != null
&& !e.getKey().isEmpty() && !e.getValue().isEmpty()
)
.flatMap(e -> IntStream.range(0, Math.min(e.getKey().size(), e.getValue().size()))
.mapToObj(i -> new ErrorMessage(
e.getKey().get(i), e.getValue().get(i)
)) // Stream<ErrorMessage>
)
.collect(Collectors.toList());
}