【发布时间】:2020-11-21 03:40:47
【问题描述】:
你知道如何从TopComplexity 对象中检索所有SimpleProperty 吗?
我需要将该 for 循环 更改为 stream “种类”的代码。
@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());
}
}
}
}
非常感谢任何形式的帮助
【问题讨论】:
-
Stream 在这里对减少 for 循环的主体或其可读性没有多大帮助。我的建议是改变对象设计,就像在每个对象中添加“public List
flatten()”,它只负责将自己的复杂元素展平/汇总到一个简单的列表中(并将调用嵌套元素的 flatten()转动)。然后你只需要调用“top.flatten()”,它就会返回你想要的所有简单属性。 -
老实说,这真的很简单,而且是个好主意。非常感谢
标签: java lambda functional-programming java-stream