Java 8 Optional和flatMap-有什么问题? [英] Java 8 Optional and flatMap - what is wrong?
问题描述
一些代码:
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方法中,出现错误类型不匹配:无法从列表转换为可选"
Why am I not able to do this? In flatMap method I am getting error "Type mismatch: cannot convert from List to Optional"
我的目标是:
-
如果存在可选内容,我想基于此可选对象属性获取项目列表
If optional is present I want to get list of items based on this optional object property
如果不存在可选参数,我想返回空列表
If optional is not present I want to return empty list
推荐答案
您可以使用map
执行所需的操作.如果Optional
为空,则不会执行map
操作,但再次留空为Optional
.之后,您可以提供后备值:
You can use map
to perform the desired operation. The map
operation will not take place if the Optional
is empty but leave again an empty Optional
. You can provide the fallback value afterwards:
player.map(p -> teamDAO.findPlayers(p.team)).orElse(Collections.emptyList())
Optional
无法执行从Player
的List
到播放器名称String
的List
的映射;这是一个Stream
任务:
The mapping from a List
of Player
to a List
of Player’s name String
s can’t be performed by an Optional
; that’s a 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());
这篇关于Java 8 Optional和flatMap-有什么问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!