3 回答
TA贡献1802条经验 获得超5个赞
您可以使用的简单方法:
static Stream<Example> flatten(Example ex) {
if (ex.getSubExamples() == null || ex.getSubExamples().isEmpty()) {
return Stream.of(ex);
}
return Stream.concat(Stream.of(ex),
ex.getSubExamples().stream().flatMap(Main::flatten));
}
您可以将其用作
List<Example> flattened = examples.stream()
.flatMap(Main::flatten) //change class name
.collect(Collectors.toList());
TA贡献1809条经验 获得超8个赞
例如:
private static Stream<Example> flat(Example example) {
return Stream.concat(Stream.of(example),
example.getSubExamples().stream().flatMap(Sandbox::flat));
}
where 是定义方法的类。Sandboxflat
TA贡献1804条经验 获得超2个赞
这可以通过非递归方式完成:
private Collection<Example> flatten(Example example) {
Queue<Example> work = new ArrayDeque<>();
if (example != null) {
work.offer(example);
}
Collection<Example> flattened = new ArrayList<>();
while(!work.isEmpty()) {
Example cur = work.poll();
flattened.add(cur);
cur.subExamples.forEach(work::offer);
}
return flattened;
}
添加回答
举报