如何获取Media类的列表,它返回两个实体?

时间:2019-05-19 11:46:19

标签: java spring hierarchy

我在Spring Web应用程序中有两个类Video和Photo,分别使用jpa,mysql,amazon s3。我想要的是能够在我的视图中返回一个媒体列表,该列表将视频和照片作为一个实体同时存在。有没有办法做到这一点。我需要一个主意。

想法

如果我创建一个Media类并制作照片和视频对该类进行扩展,那么对您有帮助吗?有没有办法说getMediaList及其返回的视频和按创建日期排序的实体?

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则实际上您可以创建一个抽象的Media类,并使VideoPhoto类都从该类扩展。

要在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


希望这会有所帮助。