Java中迭代Map时如何在内部迭代List对象并为其赋值

发布于 2025-01-11 11:45:05 字数 1208 浏览 3 评论 0原文

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中以最简洁的方式动态迭代吗?

先感谢您 :)

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;
    }

Please refer above java method to suggestions.

Could someone please help to write logic to iterate dynamically in most concise way in java?

Thank you in advance :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不如归去 2025-01-18 11:45:05

所提出的方法不使用任何输入参数 validationResultseverity,并且它显示映射仅包含一个条目。

但是,为了简单地构建错误消息列表,可以使用 Stream API 将映射条目流转换为 ErrorMessage 列表,其中映射条目中的列表由 提供的索引进行迭代IntStreamflatMap 用于连接所有条目的错误消息:

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());
}

The presented method does not use any of the input arguments validationResult and severity and it shows that the map contains only one entry.

However, to simply build a list of error messages, Stream API could be used to convert the stream of map entries into the list of ErrorMessage where the lists in map entries are iterated by indexes provided by IntStream and flatMap is applied to join the error messages from all entries:

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());
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文