Я хочу отсортировать список продуктов в классе 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? Таким образом, вы можете просто отсортировать свой список.
@RobbyCornelissen: У дат разные значения. Я обновил свой пост
Весь пример кажется надуманным. Вы хотите отсортировать список по свойству, но две трети объектов в этом списке не имеют этого свойства. Вы явно пытаетесь чего-то достичь, но из вашего вопроса неясно, что это такое.




Как предложил @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
В дизайне нет особого смысла. С таким же успехом можно просто определить свойство
orderDateна уровнеProduct.