Поток по списку из Необязательный - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть простой пример ниже

static class Town  {
    School school;
}

static class School {
    List<Subject> subjects;
}

static class Subject{
    String name;
}

Я хотел бы реализовать метод, который возвращает имена субъектов для данного города, город также может быть нулевым

    List<String> getSubjectNames(Town town) {
    return Optional.ofNullable(town)
            .map(town1 -> town1.school)
            .map(school -> school.subjects.stream())
            .flatMap(subjects -> )
            ...
     }

Как правильно преобразовать тематический поток в тематический для операций с картой. Любые указатели будут оценены.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Вы можете попробовать:

List<String> getSubjectNames(Town town) {
    return Optional.ofNullable(town)
            .map(town1 -> town1.school)
            .map(school -> school.subjects.stream().map(Subject::getName))
            .orElse(Stream.empty())
            .collect(Collectors.toList());
 }
0 голосов
/ 09 сентября 2018

Не используйте опционально для проверки на ноль. Это не то, для чего это. Все, что вам нужно (если вы действительно хотите принять нулевой город), это

List<String> getSubjectNames(Town town) {
    if (town == null) {
        return Collections.emptyList();
    }

    return town.getSchool()
               .getSubjects()
               .stream()
               .map(Subject::getName)
               .collect(Collectors.toList());
}

Если бы у вас действительно был дополнительный город, вы бы сделали то же самое:

return optionalTown.map(town ->
   town.getSchool()
       .getSubjects()
       .stream()
       .map(Subject::getName)
       .collect(Collectors.toList())
).orElse(Collections.emptyList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...