2014-03-31 46 views
0

我有一個List<RSSQuestion>問題,這些問題我想列表排序:先用自己的keyActivity,然後在每個keyActivitysubActivities;我需要根據subActivities來解決問題。Collection.sort()第二劃分基於第一訂貨

例如:

  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進行排序?

+1

問題很混亂。 'subActivity'究竟如何存儲?這是一個列表嗎?你想如何基於該列表對extractDataByKeyactivity進行排序?現在你正在排序'subActivity'本身的列表。 –

回答

5

它都應該有一個Comparator做,但你只能去SubActivityKeyActivity是相同的(即keyActivityCompare == 0):

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

看起來像'o1.getSubActivity()'是一個集合本身。 OP實際上是在他的代碼中進行分類。所以這是行不通的。 –

+0

@RohitJain或者,他們的代碼沒有工作。否則,除了吸氣劑上一個令人困惑的名字,它有什麼問題? – weston

4

Collections.sortstable

算法排序使用並不一定是一個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) 

排序的這種方式讓人想起了radix sort