如何按ASC顺序排列包含列表的对象



我想从列表中获取数据。

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

最新更新