首页 > 解决方案 > 从可选列表中流式传输

问题描述

我在下面有一个简单的例子

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 -> )
            ...
     }

您如何正确地将主题流转换为主题以进行地图操作。任何指针将不胜感激。

标签: javalambdajava-8java-stream

解决方案


不要使用 Optional 来检查 null。那不是它的用途。你所需要的(如果你真的想接受一个空城镇)是

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());

推荐阅读