Как отсортировать разные даты?

Я хочу отсортировать список продуктов в классе Foo по разным датам (creationDate, displayDate и requestDate) и вернуть список продуктов. У вас есть эффективное предложение?

public class Car extend Product {

   String name;

   Date creationDate;

   Product(String name, Date creationDate){
    this.name = name;
    this.creationDate= creationDate;
   }
}

public class Bicycle extend Product {
   String name;

   Date displayDate;

   Bicycle(String name, Date displayDate){
    this.name = name;
    displayDate= displayDate;
   }


}

public class Motorcycle extend Product {
   String name;

   Date requestDate;

   Motorcycle (String name, Date requestDate;{
    this.name = name;
    requestDate=requestDate;;
   }


}

.

public class ProductConfiguration(){

   List<Car> cars = new ArrayList<>();
   cars.add (new Car ("Jeep", new Date());

   List<Bicycle> bicycles = new ArrayList<>();
   bicycles .add (new Bicycle ("mountainbike", new Date());

   List<Motorcycle > motorcycles = new ArrayList<>();
   motorcycles.add (new Motorcycle ("motorcycles", new Date());

// getter and setter 

}

Я хочу отсортировать список продуктов в классе Foo по разным датам (creationDate, displayDate и requestDate) и вернуть список продуктов.

public class Foo {


  public List<Product> readData() {  
    ProductConfiguration productConfiguration = new ProductConfiguration();

    List<Product> products = new ArrayList<>();

    products.add(productConfiguration.getCars());
    products.add(productConfiguration.getBicycles());
    products.add(productConfiguration.getMotorcycles());


   public List<Product> sortProductByDate(){
      // I want to sort the list products by date (creationDate, displayDate 
         and requestDate)
         and return the Product List products

   }

  }
}

В дизайне нет особого смысла. С таким же успехом можно просто определить свойство orderDate на уровне Product.

Robby Cornelissen 28.09.2018 11:38

Если у каждого продукта есть дата заказа, то почему бы просто не поместить поле orderDate в свой класс Product? Таким образом, вы можете просто отсортировать свой список.

Seelenvirtuose 28.09.2018 11:39

@RobbyCornelissen: У дат разные значения. Я обновил свой пост

java java 28.09.2018 12:51

Весь пример кажется надуманным. Вы хотите отсортировать список по свойству, но две трети объектов в этом списке не имеют этого свойства. Вы явно пытаетесь чего-то достичь, но из вашего вопроса неясно, что это такое.

Robby Cornelissen 28.09.2018 12:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
55
1

Ответы 1

Как предложил @Seelenvirtuose, я также рекомендую вам добавить поле даты в свой класс продукта:

public class Product // alternative: create an interface which your classes can implement
{
    private String name;
    private Date date;

    public Product(String name, Date date)
    {
        this.name = name;
        this.date = date;
    }

    // getter / setter
}

Тогда вы сможете сделать следующее:

    Product bike = new Product("Bike", new Date()); // just for example. You can create a specialized class Bike with additional fields. This is just for demonstration purposes
    Product car = new Product("Car", new Date()); // see above

    List<Product> productList = new ArrayList<>();
    productList.add(bike);
    productList.add(car);

    productList.sort(new Comparator<Product>()
    {
        @Override
        public int compare(Product o1, Product o2)
        {
            return o1.date.compareTo(o2.date);
        }
    });

   // after this your list is sorted by date

Другие вопросы по теме