java - java - 如何按asc顺序对包含Object的列表进行排序

我想从asc顺序获取数据的列表。

 

List<Region> region = (List<Region>) model.get(" region" );




如果我使用Collection.sort(region);

然后显示这个, the method sort(List) in the type Collections is not applicable for the arguments (List )

时间:

需要将类Region定义为Comparable,或者需要将 Comparator类型的其他参数传递给排序方法。

如果没有Comparator签名是,

 

public static <T extends Comparable<? super T>> void sort(List<T> list)[1]



javadoc明确表示,该类必须实现可比较的:

根据元素的自然顺序对指定列表按升序进行排序,列表中的所有元素都必须实现可比较的接口,而且,列表中的所有元素必须是相互比较的(也就是说,e1.compareTo(e2)不能在列表中抛出任何元素e1和e2的ClassCastException )。

在这种情况下,你需要修改代码,如下所示:

 

public class Region implements Comparable {



 public int compareTo(Region o) {


 //Add the logic to compare regions here.


 }



 . .. 


}



具有Comparator的第二个版本具有以下签名

 

public static <T> void sort(List<T> list, Comparator<? super T> c)



而且,所有元素必须使用传递的比较器进行比较:

根据指定比较器引发的顺序对指定列表进行排序。列表中的所有元素必须使用指定的比较器(也就是说c.compare(e1, e2 )相互比较。

此时,需要直接调用代码来调用排序方法,如下所示:

 

Collections.sort(regionList, (Region r1, Region r2)-> {


 //Add compare logic here


});



注意:在代码中还有一个小错误使用的类是集合(有一个),而不是接口Collection ,我还将列表的名称更改为regionList(最终将它命名为区域),因为它不仅是一个元素,而且是一个列表。

你可以将排序保留在数据库查询中。

值应该是唯一的,你也可以作为SortedSet模型,实现类: TreeSet

代码中的自定义比较器,

 

List<Region> region = (List<Region>) model.get(" region" );


Collections.sort(region, new Comparator<Region>() {


 @Override


 public int compare(Region a1, Region a2) {


 return a1.getType().compareToIgnoreCase(a2.getType());//You can alter this condition based on your condition to compare


 }


});



我已经完成了。

 

Collections.sort(region, new Comparator<Region>() {


 public int compare(Region obj1, Region obj2) {


 return obj1.getStrRegion().compareTo(obj2.getStrRegion());


 }


 });



...