比较方法违反了它的一般契约(比较相同的值)[重复]

问题描述 投票:0回答:1
List<String> listDataHeader = ...;
Map<String, Integer> ranks = new HashMap<>() ...;


// following causes java.lang.IllegalArgumentException: Comparison method violates its general contract!

Collections.sort(listDataHeader, (o1, o2) -> {
    if (ranks.containsKey(o1) && ranks.containsKey(o2))
        return ranks.get(o1).compareTo(ranks.get(o2));
    else
        return 0;
});

如何解决这里的

Comparison method violates its general contract!
错误?
ranks
map 中的一些整数可能是相同的值,或者不存在,在这种情况下比较器返回 0,这意味着我不关心这种情况下的顺序。

java android comparator
1个回答
0
投票

正如 JTODR 所说,传递性是问题所在。

假设你有:

a -> 1
b -> 2
c not mapped.

然后 a == c 和 b == c 但是 a < b

© www.soinside.com 2019 - 2024. All rights reserved.