【发布时间】:2019-09-24 01:45:15
【问题描述】:
我有一个 Java ArrayList,其中包含一些 ObjType 类型的对象。
假设对象有两个字段:
- boolean 字段 isManual()
- double 值 getAffinity()
我正在尝试根据多个标准订购此 ArrayList:
-首先所有具有 isManual=true 的对象,其顺序与它们在 ArrayList 中已有的顺序相同
- 然后我想要所有 isManual=false 的对象按 getAffinityValue 排序(从最低到最高)
我想出了这段代码,但它不起作用(似乎是随机排序):
Collections.sort(coda, new Comparator<ObjType>() {
public int compare(ObjType a, ObjType b) {
boolean b1=a.isManual();
boolean b2=b.isManual();
if(b1 && b2) {
if (a.getAffinity() < b.getAffinity()) return 1;
if (a.getAffinity() > b.getAffinity()) return -1;
return 0;
}
if (b1) return -1;
if (b2) return 1;
if (a.getAffinity() < b.getAffinity()) return 1;
if (a.getAffinity() > b.getAffinity()) return -1;
return 0;
}
}
有什么建议吗?非常感谢!
【问题讨论】:
-
嗨@ThomasSallaberger。我也尝试了该解决方案,并提出了一些与我目前拥有的代码类似的代码(稍微长一点)。那对我不起作用
-
排序两次。在第一种排序中,通过 isManual 重新排序对象。在第二个排序中,忽略 isManual 为 true 的对象并开始排序 isManual 为 false 的对象。
-
您是否尝试将它们显示在 JTable 或类似文件中?
-
对不起,我好像误解了你的问题
标签: java sorting arraylist collections