java 重复键(尝试合并值x和x)

qyswt5oh  于 2023-05-27  发布在  Java
关注(0)|答案(2)|浏览(217)

我有一个简单的类:

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)

我该怎么解决这个问题?

8yparm6h

8yparm6h1#

为了避免这个错误,你需要取一个重复的条目,例如,要做到这一点,你需要:

.collect(Collectors.toMap(Rule::getId, Rule::getCableType, (r1, r2) -> r1));
a2mppw5e

a2mppw5e2#

同样值得注意的是,在.collect之前,你可能想考虑.sorted(Comparator.comparing(rule -> rule.cableType))或类似的东西,这样你就可以有意地在重复键的情况下保留哪些值。
上面@Youcef的答案肯定消除了异常,但是为重复键选择的值是基于列表当前的任何顺序。

相关问题