Я постараюсь упростить ситуацию, с которой сталкиваюсь.Есть 2 сущности:
class Foo {
String fooProperty;
@OneToOne
Bar bar;
}
class Bar {
String barProperty;
}
Существует также класс DTO с атрибутами из Foo и Bar:
class FooDto {
String fooProperty;
String barProperty;
public static FooDto from(Foo foo) {
return new FooDto(foo.fooProperty, foo.bar.barProperty);
}
}
FooDto используется для доставки огромных объемов данных, и преобразование можетлегко сделать это с помощью потоков:
fooList.stream().map(FooDto::from).(...)
Теперь в требованиях есть изменения, и Foo может иметь много баров:
@OneToMany
List<Bar> bar;
Также требуется, чтобы он генерировался одинFooDto для каждого содержащего Bar, например, так:
Foo(fooProperty="foo1", bar=[Bar(barProperty="bar1"), Bar(barProperty="bar2")])
будет преобразовано в:
[FooDto(fooProperty="foo1", barProperty="bar1"), FooDto(fooProperty="foo1", barProperty="bar2")]
Мне удалось решить его с помощью промежуточного списка, но я все еще не уверен, что это был лучшийрешение.
Мне было интересно, можно ли сделать что-то подобное, используя чисто потоки.Я могу использовать карты и фильтры и генерировать результат с равным / меньшим размером, чем исходный ввод, но я не могу понять, как генерировать результат с большим количеством элементов.