加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java 8可选和flatMap – 出了什么问题?

发布时间:2020-12-15 04:22:54 所属栏目:Java 来源:网络整理
导读:一些代码: public class Player { Team team; String name;}public class Team { ListPlayer players;}public class Demo { @Inject TeamDAO teamDAO; @Inject PlayerDAO playerDAO; ListString findTeamMatesNames(String playerName) { OptionalPlayer pl
一些代码:

public class Player {
    Team team;
    String name;
}

public class Team {
    List<Player> players;
}

public class Demo {

    @Inject
    TeamDAO teamDAO;

    @Inject
    PlayerDAO playerDAO;

    List<String> findTeamMatesNames(String playerName) {
        Optional<Player> player = Optional.ofNullable(playerDAO.get(playerName));

        return player.flatMap(p -> teamDAO.findPlayers(p.team))
            .map(p -> p.name)
            .orElse(Collections.emptyList());
    }
}

为什么我不能这样做?在flatMap方法中我收到错误“类型不匹配:无法从列表转换为可选”

我的目标是:

>如果存在可选项,我想根据此可选对象属性获取项目列表
>如果不存在可选项,我想返回空列表

解决方法

您可以使用map执行所需的操作.如果Optional为空,则不会发生映射操作,但再次留空可选.您可以在以后提供后备值:

player.map(p -> teamDAO.findPlayers(p.team)).orElse(Collections.emptyList())

从播放列表到播放器名称字符串列表的映射不能由Optional执行;这是一个Stream任务:

Optional<Player> player = Optional.ofNullable(playerDAO.get(playerName));
return player.map(p -> teamDAO.findPlayers(p.team)
                           .stream().map(tp -> tp.name).collect(Collectors.toList()))
             .orElse(Collections.emptyList());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读