我有一个简单的类:
public class Rule {
int id;
long cableType;
}
我想把这个类的对象列表转换为Map<Integer, Long>
,所以我写了代码:
Map<Integer, Long> map = ruleList.stream().collect(Collectors.toMap(Rule::getId, Rule::getCableType));
这个列表有一个重复的例子,比如(1, 10), (1,40)
,当我运行这段代码时,我得到了这个异常:
Exception in thread "main" java.lang.IllegalStateException: Duplicate key 21 (attempted merging values 31 and 30)
我该怎么解决这个问题?
2条答案
按热度按时间8yparm6h1#
为了避免这个错误,你需要取一个重复的条目,例如,要做到这一点,你需要:
a2mppw5e2#
同样值得注意的是,在
.collect
之前,你可能想考虑.sorted(Comparator.comparing(rule -> rule.cableType))
或类似的东西,这样你就可以有意地在重复键的情况下保留哪些值。上面@Youcef的答案肯定消除了异常,但是为重复键选择的值是基于列表当前的任何顺序。