首页 > 解决方案 > 根据孩子的领域对抽象对象列表进行排序

问题描述

我的抽象对象:

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。谢谢!

标签: javasortingcomparator

解决方案


显然,您首先必须定义如何比较没有字段的类的实例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。可以返回包含日期的内容。


推荐阅读