我想从列表中获取数据。
List<Region> region = (List<Region>) model.get("region");
如果我正在使用Collection.sort(region);
然后显示这个,类型集合中的方法排序(列表(不适用于参数(列表(
您需要将类Region
定义为Comparable
,或者您需要将类型Comparator
的附加参数传递给Sort方法。
没有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(不得在列表中为任何元素e1和e2投掷classcastException。P>
在这种情况下,您需要直接更改代码,称为排序方法如下:
Collections.sort(regionList, (Region r1, Region r2)-> {
// Add compare logic here
});
注意:您的代码中还有一个其他小错误,该类要使用的是集合(带有S(,而不是接口集合。我还将列表的名称从区域更改为区域清单(最终命名IT区域(,因为它不仅是一个元素,而且是列表。
您代码的行中的自定义比较器,
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
}
});
您可以将排序留在数据库查询中。
似乎值应该是唯一的,您也可以用作模型A SortedSet
,实现类:TreeSet
。
我完成了...
Collections.sort(region, new Comparator<Region>() {
public int compare(Region obj1, Region obj2) {
return obj1.getStrRegion().compareTo(obj2.getStrRegion());
}
});