比较方法违反了其关于通用比较器的一般合同

时间:2016-07-29 14:59:18

标签: java generics comparator

我有这种通用方法按值对Map进行排序:

public static <K, V extends Comparable<? super V>> Map<K, V>
        sortByValue(Map<K, V> map) {
    Map<K, V> result = new LinkedHashMap<>();
    Stream<Map.Entry<K, V>> st = map.entrySet().stream();

    st.sorted(Map.Entry.comparingByValue())
            .forEachOrdered(e -> result.put(e.getKey(), e.getValue()));

    return result;
}

有时候我会java.lang.IllegalArgumentException: Comparison method violates its general contract!。这段代码的行为有什么特别的原因吗?

我知道duplicate question,但是这个例子涉及泛型,lambdas和内置方法,这使得它更复杂,我希望得到一些解释。

0 个答案:

没有答案