[英]Java sorting an ArrayList of objects by 3 fields with priorities, getting unexpected results
我有一個班級Order(我切掉了較小的大小的setter和getter)。
class Order implements Comparable<Order>{
private int number;
private int price;
private int quantity;
private boolean isMarketOrder;
private boolean isBuyOrder;
@Override
public int compareTo(Order o) {
int value1 = Boolean.compare(this.isMarketOrder(), o.isMarketOrder());
if (value1 != 0){
return value1;
}
int value2 = Integer.compare(this.getPrice(),(o.getPrice()));
if (value2 != 0) {
return value2;
}
int value3 = Integer.compare(this.getNumber(),(o.getNumber()));
return value3;
}
}
我有一個訂單清單:
public static ArrayList<Order> buyOrders = new ArrayList<Order>();
我做
Collections.sort(buyOrders);
我要在排序時使用哪些規則:
實際發生的是價格較高的商品排在第一位,而isMarketOrder == true
商品排在最后。
這是為什么?
由於true
大於false
,因此您使用的排序方式是在isMarkerOrder==true
之前進行isMarketOrder==false
排序。 如果你有:
int value1 = Boolean.compare(this.isMarketOrder(), o.isMarketOrder());
if (value1 != 0){
return -value1;
}
你會得到相反的效果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.