根据子对象的字段对抽象对象列表进行排序

时间:2020-02-18 11:38:16

标签: java sorting comparator

我的抽象对象:

public abstract class ContentEntry {
    private double score;
}

ContentEntry有四个孩子,其中两个(MovieSong)的字段为long date;

我有一个List<ContentEntry>,我以前是用score进行排序的:

.flatMap(entries -> Flux.fromIterable(entries)
                        .sort(Comparator.comparing(ContentEntry::getScore))
                        .collectList()
        )

我现在想按date进行排序,但看不到如何使用Comparator。谢谢!

1 个答案:

答案 0 :(得分:0)

显然,您首先必须定义如何比较没有date字段的 类的实例,以及如何将它们与具有data字段的对象进行比较。

完成后,您可以定义一个类

class MyComparator implements Comparator<ContentEntry> {
  public int compare(ContentEntry e1, ContentEntry e2) {
    long date1 = -1; // Date of first entry, -1 indicates "no date"
    long date2 = -1; // Date of first entry, -1 indicates "no date"
    if ( e1 instanceof Movie ) date1 = ((Movie)e1).date;
    else if ( e1 instanceof Song ) date1 = ((Song)e1).date;
    if ( e2 instanceof Movie ) date2 = ((Movie)e2).date;
    else if ( e2 instanceof Song ) date2 = ((Song)e2).date;

    // Now compare based on date1, date2, and potentially other things
    ...
  }
}

请注意,最好引入一个函数getSortKey(),该函数返回用于排序的键。该功能可以被MovieSong之类的类覆盖。可能会返回包含日期的内容。