Избегайте вложенного foreach и используйте вместо него flatMap - PullRequest
0 голосов
/ 13 февраля 2020

Контекст проблемы:

Объект Person содержит 3 поля, из которых 1 поле является списком Family List<Family>

Объект Family содержит 3 поля, то есть name, age, hobbies.

В моем классе TaskService у меня есть метод create, который принимает person в качестве аргумента из интерфейса create(Person).

В запросе, когда объект person приходит, у него есть 2 заполненных поля для List<Family>, но один не заполнен.

Так что я должен позвонить в другую службу, которая возвращает мне Map<String, Family>.

Так что мне нужно, для соответствующего лица переберите список хобби и заполните это пропущенное поле в аргументе списка типов лиц.

Я его реализую, но это приводит меня к вложенным циклам foreach, которых я хочу избежать. Я знаю, что этого можно избежать с помощью flatMap, но я не уверен, каким образом.

familyTypeService.getFamilyTypes(person.id).forEach {
    if(it.value.hobbies == person[0].family.hobbies) {
        person[0].family.label = it.value.label
    }
}

Я могу реализовать это так, но только для первого элемента.

Как я могу это сделать для всех элементов в списке?

Я ожидаю что-то вроде:

Person.family.flatMap {
   FamilyTypeService.getFamilyTypes(person.id)………
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...