为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 java 8 和流将属性值从列表第一个元素传播到所有列表元素?

如何使用 java 8 和流将属性值从列表第一个元素传播到所有列表元素?

犯罪嫌疑人X 2021-06-08 13:35:23
我有一个List<DataDTO>dataPerDemo and each list element hasList<AnotherDataDTO> dataForFirstDemo and it hasList<AnotherWeekDataDTO> weeksForFirstDemo.我对每个演示都有相同的结构。期望的结果是将属性值从第一个列表元素 weekForFirstDemo 传播到其余的列表元素。我做到了,但我想知道如何通过使用 java 8 和流(可能是 flatMap)来优化它。欢迎所有想法。问候private void propagateFlagWeekIsIncludedToTheAllDemos(List<BaselineRatingsSweepsTableDataDTO> sweepsDataPerDemo) {    Iterator<BaselineRatingsSweepsTableDataDTO> sweepsIterator = sweepsDataPerDemo.iterator();    // No primary ... nothing    if (!sweepsIterator.hasNext()) return;    List<BaselineRatingsSweepDataDTO> sweepsForPrimaryDemo = sweepsIterator.next().getSweeps();        // Process remaining demos ( secondary,tersiary .. )    while (sweepsIterator.hasNext()) {        List<BaselineRatingsSweepDataDTO> sweeps = sweepsIterator.next().getSweeps();        processSweeps (sweepsForPrimaryDemo, sweeps);    }}private void processSweeps(List<BaselineRatingsSweepDataDTO> sweepsForPrimaryDemo,    List<BaselineRatingsSweepDataDTO> sweepsForAdditionalDemos) {        // TODO: assert equal sizes    // sweepsForPrimaryDemo && sweeps sizes should be the same !    for (int i=0; i < sweepsForAdditionalDemos.size(); i++) {        List<BaselineRatingsSweepWeekDataDTO> primaryWeeks = sweepsForPrimaryDemo.get(i).getWeeks();        List<BaselineRatingsSweepWeekDataDTO> additionalWeeks = sweepsForAdditionalDemos.get(i).getWeeks();                copyIncludeFlag(primaryWeeks, additionalWeeks);    }}private void copyIncludeFlag(List<BaselineRatingsSweepWeekDataDTO> primaryWeeks,    List<BaselineRatingsSweepWeekDataDTO> additionalWeeks) {        // TODO: assert equal sizes    for (int i=0; i < primaryWeeks.size(); i++) {         if (primaryWeeks.get(i).getWeek().equals(additionalWeeks.get(i).getWeek())) {            additionalWeeks.get(i).setIsIncluded(primaryWeeks.get(i).getIsIncluded());        }    }} 
查看完整描述

2 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

您可以在 java 8 中使用 IntStream 进行迭代:对于字符串列表,我在下面给出了一个示例,您可以根据您的实际列表进行修改:


private void copyIncludeFlag(List<String> primaryWeeks, List<String> additionalWeeks) {

        IntStream.range(0, primaryWeeks.size()).forEach(weekNumber -> {

             if (primaryWeeks.get(weekNumber).equals(additionalWeeks.get(weekNumber))) {

                    additionalWeeks.get(weekNumber).equals(primaryWeeks.get(weekNumber));

                }

        });

            }

我不知道这是否是您要查找的内容或其他内容。但是对于迭代,您可以使用它,它会对您有所帮助。只需更改方法参数中的列表类型即可。


如果对您有帮助,请告诉我。

我只是建议,它可能是也可能不是确切的答案。


查看完整回答
反对 回复 2021-06-10
  • 2 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信