我的抽象对象:
public abstract class ContentEntry {
private double score;
}
ContentEntry
有四个孩子,其中两个(Movie
和Song
)的字段为long date;
我有一个List<ContentEntry>
,我以前是用score
进行排序的:
.flatMap(entries -> Flux.fromIterable(entries)
.sort(Comparator.comparing(ContentEntry::getScore))
.collectList()
)
我现在想按date
进行排序,但看不到如何使用Comparator。谢谢!
答案 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()
,该函数返回用于排序的键。该功能可以被Movie
和Song
之类的类覆盖。可能会返回包含日期的内容。