簡體   English   中英

如何按升序對包含列表的對象進行排序

[英]How to sort the Object containing list in asc order

我想按升序從列表中獲取數據。

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

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

然后顯示此內容,類型為Collections的方法sort(List)不適用於參數(List)

您需要將Region類定義為Comparable或者需要將Comparator類型的其他參數傳遞給sort方法。

沒有Comparator簽名

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的第二個版本具有以下簽名

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),因為它不僅是單個元素,而且還是一個列表。

行中的自定義比較器,用於您的代碼,

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

您可以將排序留給數據庫查詢。

看起來值應該是唯一的,您還可以將SortedSet作為模型來實現類: TreeSet

我做完了...

Collections.sort(region, new Comparator<Region>() {
            public int compare(Region obj1, Region obj2) {
                return obj1.getStrRegion().compareTo(obj2.getStrRegion());
            }
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM