簡體   English   中英

Java按優先級按3個字段對對象的ArrayList進行排序,從而獲得意外結果

[英]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);

我要在排序時使用哪些規則:

  1. isMarketOrder == true的訂單始終優先
  2. 具有isMarketOrder值的訂單按價格排序,高者優先
  3. 相同isMarketOrder和price的訂單按“數字”排序,第一個較小。

實際發生的是價格較高的商品排在第一位,而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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM