У меня есть класс под названием Order, где у меня есть методы getter и setter для поля OrderID и produstID.
1) Я хочу получить идентификатор sortID в порядке подачи и соответствующем идентификаторе продукта в отложенном порядке. Поэтому я использовал методы Comparable и compareTo для этого. Я могу сортировать orderID, но соответствующий идентификатор продукта не сортируется в порядке убывания (вторичная сортировка).
Пожалуйста, дайте мне знать, как я могу это сделать.
Код, который я использовал:
@Override
public int compareTo(Order ord)
{
double orderId1 = ((Order) ord).getOrderId();
return (int) (this.orderId - orderId1);
//return orderId.equals(ord.orderId);
}
2) Я хотел искать на основе orderID и хочу получить соответствующие продукты.
Здесь я использую жестко закодированные данные.
Мои данные выглядят следующим образом:
Данные для заказа:
orderID productID
1001 22
1003 33
1001 33
Желаемый результат для обработки:
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();
}
если нужно сравнить productId, только если значение orderId равно.
Лучший способ - использовать встроенные функции для сравнения.
@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)
.
Вот пример с вашими данными, которые заказывают предметы
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;
}
}
}
Вы можете попробовать следующее:
@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 );
}