java中使用可比较接口的排序和二次排序



我有一个名为Order的类,其中我有OrderIDprodustID字段的getter和setter方法。

1) 我想在取消订单中获得排序orderID和相应的productIDomparable接口compareTo方法来实现这一点。我可以对orderID进行排序,但相应的productID不会按降序排序(二次排序)。

请告诉我该怎么做。

我使用过的代码:

   @Override
public int compareTo(Order ord)
{
    double orderId1 = ((Order) ord).getOrderId();
    return (int) (this.orderId - orderId1);
    //return orderId.equals(ord.orderId);
}

2) 我想根据orderID进行搜索,并想获得相应的productid

这里我使用的是硬编码数据。

我的数据是这样的:

订单数据:

orderID  productID
1001        22
1003        33
1001         33

所需的soring输出为:

 orderID  productID
1001        33
1001        22
1003        33

我认为这应该有效:

public int compareTo(Order ord)
{
    if (this.orderId == ord.getOrderId()){
       return (int) (ord.getProductId() - this.productId);
    }
    return  this.orderId - ord.getOrderId();
}

if必须仅在is-orderId等于的情况下比较productId。

最好的方法是使用内置函数进行比较。

@Override
public int compareTo(Order o) {
    int d = Double.compare(this.getOrderId(), o.getOrderId());
    if (d == 0) {
        d = Double.compare(o.getProductId(), this.getProductId());
    }
    return d;
}

但我真的不认为你的orderIdproductId应该是double类型。最好将它们作为int。如果您更改为int,那么仍然使用内置比较器,只需更改为Integer.compare(x,y)即可。

你可以试试这个:

@Override
public int compareTo( Order ord )
{
    if( this.orderId != ord.getOrderId() )
    {
        return Double.compare( this.orderId, ord.getOrderId() );
    }
    return Double.compare( ord.getProductId(), this.productId );
}

这是一个包含订购商品的数据的示例

package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class TestOrder {
    public static void main(String[] args) {
        List<OrderProduct> myList=new ArrayList<>();
        myList.add(new OrderProduct(22, 1001));
        myList.add(new OrderProduct(33, 1003));
        myList.add(new OrderProduct(33, 1001));
        Collections.sort(myList);
        for (OrderProduct op : myList) {
            System.out.println(op.getOrderId() + " " + op.productId);
        }
    }
    private static class OrderProduct implements Comparable<OrderProduct>{
        private int productId;
        private int orderId;
        public OrderProduct(int productId, int orderId) {
            super();
            this.productId = productId;
            this.orderId = orderId;
        }

        public int getProductId() {
            return productId;
        }
        public int getOrderId() {
            return orderId;
        }

        @Override
        public int compareTo(OrderProduct o) {
            if (o==null) {
                return 1;
            }
            if (orderId==o.orderId) {
                return o.productId-productId;
            }
            return orderId-o.orderId;
        }
    }
}

最新更新