java - 如何使用 Stream API 从对象中检索嵌套列表?

标签 java lambda functional-programming java-stream

您知道如何从 TopComplexity 对象检索所有 SimpleProperty 吗? 我需要将 for 循环 更改为 stream “kind”代码段。

@Data
public class TopComplexity {
   List<SuperComplexProperty> superComplexProperties;
}
@Data
public class SuperComplexProperty {
   List<SimpleProperty> simpleProperties;
   ComplexProperty complexProperty;
}

@Data
public class ComplexProperty {
   List<SimpleProperty> simpleProperties;
}

public class MainClass {
   public static void main(String[] args) {

       TopComplexity top = null;
       List<SimpleProperty> result = new ArrayList<>();
      
       for(SuperComplexProperty prop : top.getSuperComplexProperties) {
          result.addAll(prop.getSimpleProperties());
      
          if(Objects.nonNull(prop.getComplexProperty()) {
              result.addAll(prop.getComplexProperty().getSimpleProperties());
         }
      }
   }
}

非常感谢任何形式的帮助

最佳答案

您可以将 flatMap 与涉及 Stream 的串联和三元运算符混合使用,例如:

List<SimpleProperty> result = top.getSuperComplexProperties().stream()
        .flatMap(scp -> Stream.concat(
                scp.getSimpleProperties().stream(),
                scp.getComplexProperty() == null ?
                        Stream.empty() :
                        scp.getComplexProperty().getSimpleProperties().stream()))
        .collect(Collectors.toList());

关于java - 如何使用 Stream API 从对象中检索嵌套列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63189341/

相关文章:

c++ - decltype(auto) 从 lambda 捕获中推导出返回类型

functional-programming - 有哪些令人印象深刻的函数式代码示例?

functional-programming - OCaml while true do 循环

java - 如何为将输出打印到控制台的 void 函数编写 junit 测试用例

c# - 在 C# 中使用 Dictionary<T, Func<List, bool>> 查找列表中最常见的事件

Java 8 lambda : Comparator

javascript - 有人可以帮我编写和理解部分应用程序模式吗?

java - Android ListView ,如何无边距定位 ListView ?

java - Log4j 不写入文件

java - 如何使用 Javaparser 解析 for 循环?