【发布时间】:2021-01-11 10:35:23
【问题描述】:
我有一个“类别”类的对象列表:
public class Category {
private String originalId;
private Double ordinal;
private String sportId;
private String sportName;
private String type;
private String version;
}
以及“联赛”类的对象列表:
public class League {
private String leagueName;
private String originalId;
private int rank;
public League(String name, String originalId, int rank) {
this.leagueName = name;
this.originalId = originalId;
this.rank = rank;
}
这些类描述的是相同的实体(因此“Category”类的“originalId”字段值等于“League”类的“originalId”字段值),但它们的值来自不同的来源,这就是为什么它们从一开始就分开了
我需要做的是按“联赛”类中的“排名”字段值对“类别”列表进行排序
所以,排序的逻辑应该如下:
-
对于每个“Category”对象,我会尝试通过比较它们的“originalId”字段来找到对应的“League”对象
-
如果找到相应的对象,则从“联赛”对象中获取“排名”字段的值,并使用它按排名对“类别”对象列表进行排序
-
如果没有找到对应的对象,那么在排序过程中应该将这样的“类别”对象移动到列表的末尾
所以,比较器应该是这样的:
public static Comparator<Category> byRank() {
return nullsLast(comparing(Category::getRankFromCorrespondingLeagueObject, nullsLast(naturalOrder())));
}
这就是我难过的地方,因为我在排序时使用取自另一个对象的字段值是不寻常的
有一些简单的好方法吗?
【问题讨论】:
标签: java sorting comparator