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

用户名

我有一个

List<DataDTO>dataPerDemo and each list element has

List<AnotherDataDTO> dataForFirstDemo and it has

List<AnotherWeekDataDTO> weeksForFirstDemo.

每个演示我都有相同的结构。期望的结果是将属性值从第一个列表元素weekForFirstDemo传播到其余的List元素。我做到了,但我想知道如何通过使用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());
        }
    }
} 
托马斯·林科夫斯基(Tomasz Linkowski)

我建议使用jOOλ库及其Seq.zip()方法(Seq是的子类型Stream),如下所示:

private void propagateFlagWeekIsIncludedToTheAllDemos(List<BaselineRatingsSweepsTableDataDTO> sweepsDataPerDemo) {
    if (sweepsDataPerDemo.isEmpty()) {
        return; // No primary ... nothing
    }

    BaselineRatingsSweepsTableDataDTO tableForPrimaryDemo = sweepsDataPerDemo.get(0);
    sweepsDataPerDemo.stream()
            .skip(1) // skip primary table
            .forEach(tableForAdditionalDemo -> processTablePair(tableForPrimaryDemo, tableForAdditionalDemo)); // Process remaining demos ( secondary,tertiary .. )
}


private void processTablePair(BaselineRatingsSweepsTableDataDTO tableForPrimaryDemo,
                              BaselineRatingsSweepsTableDataDTO tableForAdditionalDemos) {
    processSweeps(tableForPrimaryDemo.getSweeps(), tableForAdditionalDemos.getSweeps());
}

private void processSweeps(List<BaselineRatingsSweepDataDTO> sweepsForPrimaryDemo,
                           List<BaselineRatingsSweepDataDTO> sweepsForAdditionalDemos) {
    // TODO: assert equal sizes
    Seq.zip(sweepsForPrimaryDemo, sweepsForAdditionalDemos)
            .forEach(tuple -> processSweepPair(tuple.v1(), tuple.v2()));
}

private void processSweepPair(BaselineRatingsSweepDataDTO sweepForPrimaryDemo,
                              BaselineRatingsSweepDataDTO sweepForAdditionalDemo) {
    copyIncludeFlag(sweepForPrimaryDemo.getWeeks(), sweepForAdditionalDemo.getWeeks());
}

private void copyIncludeFlag(List<BaselineRatingsSweepWeekDataDTO> primaryWeeks,
                             List<BaselineRatingsSweepWeekDataDTO> additionalWeeks) {
    // TODO: assert equal sizes
    Seq.zip(primaryWeeks, additionalWeeks)
            .filter(tuple -> tuple.v1().getWeek().equals(tuple.v2().getWeek()))
            .forEach(tuple -> tuple.v1().setIsIncluded(tuple.v2().getIsIncluded()));
}

请注意,您仍然需要检查大小是否相等,因为Seq.zip返回Seq的长度是其参数长度的最小值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MapStruct:如何将所有属性映射到列表的第一个元素?

如何打印列表中所有元素的第一个字母?

如何在python列表中从最后到第一个访问所有列表元素

Java的8流 - 如何合并从具有相同的字段列表中的元素,以一个元素和总结

使用Java8流过滤列表并获取第一个元素

Java列表处理第一个和最后一个元素

java-将列表迭代器重置为列表的第一个元素

如何使用XSLT将XML元素的第一个属性的值重命名?

如何获得列表或集合的第一个元素?

如何获取所有第一个子元素的innerHTML作为列表或数据框

Java的8 - 可选<CustomizedObject>获得内CustomizedObject列表的第一个元素

使用Streams生成一个新列表,同时考虑到所有第一个列表元素

拼接Python列表时,如何指定要创建的列表,包括指定的第一个元素之后的所有元素?

如何将第二个列表中的元素追加到R中第一个列表中的现有元素

如何使用列表切片从列表中获取除第一个元素以外的所有内容

在Swift中,如何检查Array的第一个元素是否等于值列表?

如何基于第一个元素以各种方式将列表配对

如何将列表列表隐藏到数据框中并使列表的第一个元素作为索引

如何更换只有一个List <字符>的第一个元素使用Java流而不进行任何更改到列表中的其他人呢?

按内部列表的第一个元素对列表列表进行排序(Java或groovy)

给定一个整数列表和一个索引列表,我该如何使用map将10添加到第一个列表中的特定元素?

Python-如何替换列表列表中每个列表的第一个元素

如何将列表分为相等的子列表,最后一个子列表由列表的第一个可能的元素组成

Java列表流,获取所有元素还是仅一个?

java:如何从具有独特的第一个字符的数组列表中获取元素

我将嵌套列表作为Python字典的条目。如何打印第一个元素为“ S”的嵌套列表?

如何将2元组的列表转换为其第一个元素的列表

如果元组具有相同的第一个元素,如何聚合元组列表中的元素?

如何通过python中的第一个字符将元素有效地分组在一个巨大的列表中

TOP 榜单

  1. 1

    来自Microsoft Office加载项taskpane.js的MySQL驱动程序模块的空引用

  2. 2

    使用AWS Cognito和React的仅限Facebook / Google的登录名(无用户名/密码)

  3. 3

    创建Windows Phone 8应用并将其连接到数据库的最佳方法(最好是SQL Server)

  4. 4

    为什么Java中的System.out.println()打印到控制台?

  5. 5

    卷曲函数无法解析来自bash中变量的代理

  6. 6

    是什么在Android的consumer-rules.pro和proguard-rules.pro之间的区别?

  7. 7

    设置与Apache POI Excel表散点图标记图标的颜色

  8. 8

    将Qt Pyside2与asyncio await语法一起使用?

  9. 9

    崇高的文字+蟒蛇的蟒蛇

  10. 10

    任务':app:minifyReleaseWithR8'.java.lang.NullPointerException的执行失败(无错误消息)

  11. 11

    OpenJDK的和AdoptOpenJDK的区别

  12. 12

    大型数据集缓存到Spark内存中时,“超出了GC开销限制”(通过sparklyr和RStudio)

  13. 13

    “执行测试CMAKE_HAVE_LIBC_PTHREAD”失败实际上是什么意思?

  14. 14

    使用Core 2.2中的Identity,如何在关闭浏览器15分钟后保持会话活动?

  15. 15

    React中的ForwardRefExoticComponent和ForwardRefRenderFunction有什么区别?

  16. 16

    猫鼬查找结果,然后将字段替换为findOne

  17. 17

    如何降级Google Colab的Torch版本

  18. 18

    Keras提前停止回调错误,val_loss指标不可用

  19. 19

    如何避免VSCode中的“导入路径不能以.ts扩展名结尾”错误?

  20. 20

    Nuxt.JS:如何在页面中获取路由URL参数

  21. 21

    是否有为什么会AccessibilityManager.sInstance导致内存泄漏的一个原因?

热门标签

归档