Простой метод, который вы можете использовать:
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());