我有一个名为Order的类,其中我有OrderID和produstID字段的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;
}
但我真的不认为你的orderId
和productId
应该是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;
}
}
}