gpt4 book ai didi

java - 使用 Comparator 对列表进行排序时出现 java.lang.illegalArgumentException : comparison method violates its general contract !

转载 作者:行者123 更新时间:2023-12-01 06:37:25 24 4
gpt4 key购买 nike

我试图在 Java 中以特定方式对列表进行排序,我发现 Comparator是一个很好的方法。

我将与您分享该问题的伪代码。

我有一个 DTO 列表,假设我想按特定顺序按属性(字符串)对其进行排序,例如以 "Hi" 开头的属性应该在顶部,其余的应该在下面。

这是我的伪代码:

list.sort(new Comparator<myDto>(){

@Override
public int compare(myDto o1, myDto o2){
if(o1.getProperty1() != null && o2.getProperty1() == null)
return -1;
else if(o1.getProperty1() == null && o2.getProperty1() != null)
return 1;
else if(o1.getProperty1().startsWith("Hi") && o2.getProperty1().startsWith("Hi"))
return 0;
else if(o1.getProperty1().startsWith("Hi") && !o2.getProperty1().startsWith("Hi"))
return -1;
return 1;

}
});

我使用了 4、5 个我自己创建的 DTO 来进行测试,但是当我注入(inject) 14k DTO 文件时,我得到 java.lang.illegalArgumentException .

有什么想法吗?

最佳答案

更改您的最终return 1return o1.getProperty1().compareTo(o2.getProperty1()) JVM 可以比较元素 a, b b, a - 如果你最后只返回 1 那么你将总是违反一般契约。

关于java - 使用 Comparator 对列表进行排序时出现 java.lang.illegalArgumentException : comparison method violates its general contract !,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51575229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com