猿问

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

我有一个


List<DataDTO>dataPerDemo and each list element has


List<AnotherDataDTO> dataForFirstDemo and it has


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

        }

    }


犯罪嫌疑人X
浏览 123回答 2
2回答

萧十郎

您可以在 java 8 中使用 IntStream 进行迭代:对于字符串列表,我在下面给出了一个示例,您可以根据您的实际列表进行修改:private void copyIncludeFlag(List<String> primaryWeeks, List<String> additionalWeeks) {&nbsp; &nbsp; &nbsp; &nbsp; IntStream.range(0, primaryWeeks.size()).forEach(weekNumber -> {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (primaryWeeks.get(weekNumber).equals(additionalWeeks.get(weekNumber))) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; additionalWeeks.get(weekNumber).equals(primaryWeeks.get(weekNumber));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }我不知道这是否是您要查找的内容或其他内容。但是对于迭代,您可以使用它,它会对您有所帮助。只需更改方法参数中的列表类型即可。如果对您有帮助,请告诉我。我只是建议,它可能是也可能不是确切的答案。
随时随地看视频慕课网APP

相关分类

Java
我要回答