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());
}
}