Java 如何使用自己的比较器按类字段排序?

Java 如何使用自己的比较器按类字段排序?,java,list,sorting,object,comparator,Java,List,Sorting,Object,Comparator,我有一个示例类,比如说Country: 国家级{ 公共字符串名称; 公共人口; 国旗; ... } 我在其他地方定义了这个标志类 类标志{ 字符串id; 整数像素; ... } 现在,我创建了一个单独的比较器DefaultFlagRankingComparator(),它可以按id对国旗进行排序。如何使用这个DefaultFlagRankingCom

我有一个示例类,比如说
Country

国家级{
公共字符串名称;
公共人口;
国旗;
...                                                                        
}
我在其他地方定义了这个
标志

类标志{
字符串id;
整数像素;
...
}

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

您可以调用
比较器的compare方法,对每个国家/地区的国旗字段进行排序

DefaultFlagRankingComparator flagComparator=
新的DefaultFlagRankingComparator();
集合。排序(国家(a、b)->
比较(a.getFlag(),b.getFlag());
您还可以使用创建一个
比较器
,使用键提取功能和一个比较这些键的
比较器
(如所建议)

DefaultFlagRankingComparator flagComparator=
新的DefaultFlagRankingComparator();
集合。排序(国家,
比较(Country::getFlag,flagComparator));
  • 您可以使用预定义的方法比较ID的
    String
    值:

    array.sort(国家(c1、c2)->Objects.compare(
    c1.getFlag().getId(),c2.getFlag().getId(),
    Comparator.naturalOrder());
    
    array.sort(国家/地区、比较国、比较国)
    country.getFlag().getId(),Comparator.naturalOrder());
    
  • 您可以指定一个自定义:

    array.sort(国家/地区、比较国)
    .comparing(country->country.getFlag(),
    新的DefaultFlagRankingComparator());
    
    静态类DefaultFlagRankingComparator实现Comparator{
    @凌驾
    公共整数比较(标志o1、标志o2){
    返回Objects.compare(o1.getId()、o2.getId()、O3,
    Comparator.naturalOrder());
    }
    }
    
  • 您可以在
    标志
    类中实现接口:

    Arrays.sort(国家、比较国、比较国(Country::getFlag));
    
    静态类标志实现可比较{
    字符串id;
    公共字符串getId(){return id;}
    @凌驾
    公共int比较(标记该){
    返回Objects.compare(this.getId(),that.getId(),
    Comparator.naturalOrder());
    }
    }