簡體   English   中英

Collection.sort()基於第一順序的第二次排序

[英]Collection.sort() second sorting based on first ordering

我正在嘗試排序的List<RSSQuestion>有一個問題List<RSSQuestion> :首先是它們的keyActivity ,然后在每個keyActivity中都有subActivities 我需要根據subActivities整理問題。

例如:

  1. 外觀設計(keyActivity)
    1. 子活動一
  2. 規格(keyActivity)
    1. 總覽
    2. 積壓

我擁有的代碼如下,該代碼基於keyActivity排序問題,但是我不知道如何基於subActivity進行第二次排序:

private static List<RSSQuestion> sortingExtractedData(List<RSSQuestion> extractedDataByKeyactivity) {
    List<RSSQuestion> exctractedData = new ArrayList<>();

    Collections.sort(extractedDataByKeyactivity, new Comparator<RSSQuestion>() {

        @Override
        public int compare(RSSQuestion o1, RSSQuestion o2) {
            return o1.getKeyActivity().compareTo(o2.getKeyActivity());
        }
    });

    for (RSSQuestion rssQuestion : extractedDataByKeyactivity) {
        Collections.sort(rssQuestion.getSubActivity(), new Comparator<String>() {

            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
    }

    exctractedData.addAll(extractedDataByKeyactivity);
    return exctractedData;
}

請讓我知道,如何對其余subActivities進行排序?

所有這些都應該由一個Comparator完成,但是只有在KeyActivity相同時(即keyActivityCompare == 0 ),您才轉到SubActivity

Collections.sort(extractedDataByKeyactivity, new Comparator<RSSQuestion>() {

    @Override
    public int compare(RSSQuestion o1, RSSQuestion o2) {
        int keyActivityCompare = o1.getKeyActivity().compareTo(o2.getKeyActivity());
        if (keyActivityCompare == 0)
          return o1.getSubActivity().compareTo(o2.getSubActivity());
        return keyActivityCompare;
    }
});

Collections.sort穩定的

sort使用的算法不必是mergesort,但必​​須穩定。

這意味着,如果兩個元素具有相同的值,則排序不會更改其順序。 您可以通過首先對子活動進行排序然后對關鍵活動進行排序來利用此功能。

例如,我對數字元組進行排序,首先在第一個元素上,然后在第二個元素上。 輸入:

(4, 2), (1, 0), (3, 3), (4, 1)

首先對第二個元素進行排序:

(1, 0), (4, 1), (4, 2), (3, 3)

然后在第一個元素上再次排序:

(1, 0), (3, 3), (4, 1), (4, 2)

這種排序方式讓人想起基數排序

暫無
暫無

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

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