java - 根据孩子的领域对抽象对象列表进行排序
问题描述
我的抽象对象:
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。谢谢!
解决方案
显然,您首先必须定义如何比较没有字段的类的实例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
。可以返回包含日期的内容。
推荐阅读
- python - Visual Studio Code、ReStructurdText 扩展找不到 Python
- html - 显示带有文本溢出 css 的面包屑
- android - 如何处理返回多个模型的改造调用
- node.js - Firebase推送通知Node.js 10中的可变值正确语法?
- maven - 从 Jenkins 修改 POM.xml 文件中的属性标记
- javascript - 是什么导致“无法在 'CanvasRenderingContext2D' 上执行 'drawImage' - 提供的 HTMLImageElement 处于'损坏'状态”错误?
- python-3.x - 更改 Mac 上的默认 python 版本 - 安装 Biopython
- javascript - 无法提供 defaultValue 作为表达式
- embedded-linux - 如何在 Yocto 中排队补丁
- python - 在python中调用n级嵌套列表中的值