一些代码:
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
为空,则 map
操作将不会发生,但再次保留一个空的 Optional
。您可以在之后提供回退值:
player.map(p -> teamDAO.findPlayers(p.team)).orElse(Collections.emptyList())
从 Player
的 List
到 Player 名称 String
的 List
的映射不能是由 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());
关于Java 8 Optional 和 flatMap - 有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26252779/