在从事纸牌游戏项目时,我试图创建一个新地图,同时已经有一个我想用作 KeySet 的列表。地图必须使用 Player 类型的键,并且每个键都包含一个由单个 组成的值List<Trick>
,其中 Player 是一个接口,而 Trick 是一个类。
最初,我尝试使用List<Player> players
我拥有的 Stream,然后通过以下方式将其收集到 Map:
private Map<Player, List<Trick>> playerTricks = players.stream()
.collect(Collectors.toMap(x -> x, ArrayList::new));
但是,我的 IDE IntelliJ 不允许我使用这种格式,因为它说“无法解析构造函数 ArrayList”。
令我惊讶的是,当我删除::
-Operator 时,IDE 不再抱怨:
(Collectors.toMap(x -> x, x -> new ArrayList<Trick>()));
虽然我现在确实有没有异常的代码,但我仍然不明白为什么 Scope Resolution Operator 会产生这样的错误。如果有人能正确解释,我将不胜感激。
PS 在寻找解决方案时,我发现了这个 StackOverflow 线程:
它确实涉及类似的问题,但并没有真正解决我面临的问题。