Лучший способ использовать stream java 8 с классом и субклассом

Уважаемое сообщество, у меня есть проблема в форме, как использование 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?

1
задан 18.06.2019, 18:10
1 ответ

Уже 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

0
ответ дан 02.12.2019, 23:24