Java 8 可选和 flatMap - 有什么问题?

2024-02-17

一些代码:

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 方法中,我收到错误“类型不匹配:无法从列表转换为可选”

我的目标是:

  1. 如果存在可选,我想获取基于此可选对象属性的项目列表

  2. 如果可选不存在,我想返回空列表


您可以使用map执行所需的操作。这map如果出现以下情况,操作将不会发生Optional是空的,但又留空Optional。您可以随后提供后备值:

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

映射从List of Player to a List玩家姓名Strings 不能由Optional;那是一个Stream task:

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());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 8 可选和 flatMap - 有什么问题? 的相关文章

随机推荐