首页 > 解决方案 > 如何通过具有自己的比较器的类字段进行排序?

问题描述

我有一个示例类,说Country

class Country {
    public String name;
    public int population;
    public Flag flag;  
    ...                                                                        
}

我在Flag其他地方定义了这个类

class Flag {
    String id;
    int pixel;
    ...
}

现在我创建了一个单独的比较器 DefaultFlagRankingComparator(),它可以按 id 对标志进行排序。如何使用此 DefaultFlagRankingComparator() 按标志 ID 对国家/地区列表进行排序?

标签: javalistsortingobjectcomparator

解决方案


您可以调用Comparator每个国家/地区的标志字段的比较方法。

DefaultFlagRankingComparator flagComparator =
        new DefaultFlagRankingComparator();
Collections.sort(countries, (a, b) ->
        flagComparator.compare(a.getFlag(), b.getFlag()));

您还可以使用密钥提取功能和比较这些密钥的 aComparator.comparing创建一个(如Louis Wasserman所建议的)。ComparatorComparator

DefaultFlagRankingComparator flagComparator =
        new DefaultFlagRankingComparator();
Collections.sort(countries,
        Comparator.comparing(Country::getFlag, flagComparator));

推荐阅读