Как я могу получить список класса Media и он возвращает две сущности? - PullRequest
0 голосов
/ 19 мая 2019

У меня есть два класса Video и Photo в весеннем веб-приложении, использующем jpa, mysql, amazon s3. Я хочу иметь возможность возвращать, на мой взгляд, список мультимедиа, в котором и видео, и фотографии объединены в одну сущность.Есть ли способ сделать это.мне нужна идея

Идея

Если я создам класс Media и сделаю фото и видео расширением этого класса, это поможет?Есть ли способ сказать getMediaList и его возвращаемое видео и сущность, упорядоченную по дате создания?

1 Ответ

2 голосов
/ 19 мая 2019

Если я правильно понял ваш вопрос, вы могли бы создать абстрактный класс 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


Надеюсь, это поможет.

...