Если я правильно понял ваш вопрос, вы могли бы создать абстрактный класс Media
и сделать так, чтобы классы Video
и Photo
выходили из него.
Чтобы упорядочить все элементы в List<Media>
, вы можете реализовать метод sort
, который использует компаратор в поле даты.
Например, классы могут быть организованы следующим образом:
public abstract class Media {
protected Date createdOn;
protected String name;
protected Date getCreationDate() {
return createdOn;
}
public String getName() {
return name;
}
public static void sort(List<Media> movieItems) {
movieItems.sort(Comparator.comparing(Media::getCreationDate));
}
}
public class Video extends Media {
private String someAttribute;
public Video(Date date, String name) {
createdOn = date;
this.name = name;
}
}
public class Photo extends Media {
private String someOtherAttribute;
public Photo(Date date, String name) {
createdOn = date;
this.name = name;
}
}
следующий код
public class Main {
public static void main(String[] args) {
// Create first element
Date date1 = new Date(System.currentTimeMillis());
Video video1 = new Video(date1, "Timelapse");
// Create second element
Date date2 = new Date(System.currentTimeMillis() - 1000);
Photo photo1 = new Photo(date2, "My pretty picture");
// Create list
ArrayList<Media> myMedia = new ArrayList<>();
myMedia.add(video1);
myMedia.add(photo1);
// Original
System.out.println("Original list:");
printMediaList(myMedia);
// Sorted
System.out.println("Sorted list:");
Media.sort(myMedia);
printMediaList(myMedia);
}
public static void printMediaList(List<Media> myMedia) {
for (int i = 0; i < myMedia.size(); i++) {
System.out.printf("%d. %s\n", i + 1, myMedia.get(i).getName());
}
System.out.println();
}
}
выводит это
Original list:
1. Timelapse
2. My pretty picture
Sorted list:
1. My pretty picture
2. Timelapse
Надеюсь, это поможет.