我想按升序从列表中获取数据。
List<Region> region = (List<Region>) model.get("region");
如果我使用的是Collection.sort(region);
然后显示此内容, 类型Collections中的sort(List)方法不适用于参数(List)
答案 0 :(得分:2)
您需要将类Region
定义为Comparable
,或者需要将类型Comparator
的附加参数传递给sort方法。
没有Comparator
的{{3}}是
public static <T extends Comparable<? super T>> void sort(List<T> list)[1]
和javadoc明确表示该类必须实现Comparable:
根据指定元素的自然顺序将指定列表升序排列。 列表中的所有元素必须实现Comparable接口。此外,列表中的所有元素必须相互可比较(也就是说,对于列表中的任何元素e1和e2,e1.compareTo(e2)均不得抛出ClassCastException。)
在这种情况下,您需要按照以下步骤修改代码:
public class Region implements Comparable {
public int compareTo(Region o) {
// Add the logic to compare regions here.
}
...
}
带有Comparator
的第二个版本具有以下signature:
public static <T> void sort(List<T> list, Comparator<? super T> c)
,并且所有元素都必须使用传递的Comparator进行比较:
根据指定比较器引起的顺序对指定列表进行排序。 列表中的所有元素必须使用指定的比较器可以相互比较(也就是说,c.compare(e1,e2)不得对列表中的任何元素e1和e2抛出ClassCastException。) >
在这种情况下,您需要直接调用sort方法来更改代码,如下所示:
Collections.sort(regionList, (Region r1, Region r2)-> {
// Add compare logic here
});
注意:您的代码中还有一个小错误,该类要使用的类是Collections(带有s),而不是接口Collection。我还将列表的名称从region更改为regionList(最终将其命名为region),因为它不仅是单个元素,而且还是列表。
答案 1 :(得分:0)
您可以将排序留给数据库查询。
似乎值应该是唯一的,您也可以将实现类的SortedSet
作为模型:TreeSet
。
答案 2 :(得分:0)
代码行中的自定义比较器,
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
}
});
答案 3 :(得分:0)
我做完了...
Collections.sort(region, new Comparator<Region>() {
public int compare(Region obj1, Region obj2) {
return obj1.getStrRegion().compareTo(obj2.getStrRegion());
}
});