Уважаемое сообщество, у меня есть проблема в форме, как использование streams, у меня есть 3 класса:
public Class A {
String string1A;
String string2A;
List<B> listB;
.
.
.
}
public Class B {
String string1B;
String string2B;
.
.
.
}
public Class C {
String string1A;
String string2A;
String string1B;
String string2B;
.
.
.
}
Потом у меня есть метод, который возвращает List C со всеми данными получено от базы данных, и я нуждаюсь в том, чтобы создать List A, который считал бы группируемыми все данные, как стоимость группирования - String1A, что пришло в голову мне, так это это:
List<A> listA = new ArrayList<A>();
Set<String> listString1A = listC.stream().map(x->x.getString1A()).distinct().collect(Collectors.toSet());
for(String stringFilter1A: listString1A){
A a = listC.stream()
.filter(x->getString1A().equals(stringFilter1A))
.map(x-> new A(x.getString1A(),x.getString2A))
.findFirst().get();
List<B> listB = listC.stream()
.filter(x->getString1A().equals(stringFilter1A))
.map(x-> new B(...))
.collect(Collectors.toList());
a.setListB(listaB);
listaA.add(a);
}
Существует способ делать вышеупомянутую консультацию используя только streams или пробуя удалять for?
Уже encontrГ© одна soluciГіn. Нужно создавать в классе A ее implementaciГіn hash и equals с переменной string1A, консистентным способом. Потом реализовывать фильтр mГЎs или меньше asГ-:
Map<A, List<B>> map = listC.stream()
.collect(Collectors.groupingBy(
c -> new A(...), // construct new A instance out from c instance
Collectors.mapping(
c -> new B(...), // construct new B instance out from c instance
Collectors.toList())));
и потом foreach, чтобы сохранять внутри ключей A стоимость List, сходного с этим:
map.forEach((a, listB) -> a.setListB(listB));
Потом, берет Set всех ключей, и уже у меня есть Set, что каждый элемент считает признаком стоимость List.
Это tomГ© этого ответа, который я сделал в inglГ©s: https://stackoverflow.com / questions / 52823123/best-way-to-use-stream-with-class-and-subclass