Сортировка и вторичная сортировка в Java с использованием интерфейса Coamparable

1

У меня есть класс под названием 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
  • 0
    Покажите код, в котором вы используете компаратор для сортировки коллекции.
Теги:
sorting
comparable

4 ответа

3

Я думаю, что это должно работать:

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

если нужно сравнить productId, только если значение orderId равно.

1

Лучший способ - использовать встроенные функции для сравнения.

@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).

  • 0
    Привет большое спасибо. Сортировка и вторичная сортировка работает нормально. Но как я могу искать на основе orderId и получить соответствующий productID. Здесь, если я создаю метод с именем SearchByOrderid (), то когда я передаю orderid как 1001, я должен получить все prodid, прикрепленные к нему. Как я могу это сделать.
  • 0
    @ shree11 Это зависит от того, какую коллекцию вы используете. Можете ли вы обновить свой вопрос с этой информацией?
Показать ещё 5 комментариев
0

Вот пример с вашими данными, которые заказывают предметы

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;
        }
    }

}
0

Вы можете попробовать следующее:

@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 );
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню