2015-09-22 70 views
0

我有一個ArrayList約翰遜週期找到使用API。現在我必須對這個ArrayList進行排序,但我堅持要這樣做。我在JAVA新手。我會非常感謝如果有人請幫助我。 ArrayList看起來像在JAVA中作者循環ArrayList排序

[[Hausi Müller, Johannes Martin, Bruce Winter, J Martin], [Kenny Wong, Johannes Martin], [Kenny Wong, Kostas Kontogiannis, Johannes Martin, Bruce Winter, J Martin], [Ludger Martin, Johannes Martin, Bruce Winter, J Martin], [Arun Venkataramani, Jian Yin, J-P Martin, Michael Dahlin, J Martin], [Kenny Wong, Kostas Kontogiannis, Johannes Martin], [Kostas Kontogiannis, Kenny Wong, Johannes Martin], [Augustin Lux, Christophe Le Gal, James L Crowley], [Christophe Le Gal, Augustin Lux, James L Crowley]] 

這是大列表的一部分。

+0

'Collections.sort()'? – user902383

+1

[Sort Java Collection]的可能重複(http://stackoverflow.com/questions/6957631/sort-java-collection) – Vogel612

+0

什麼是排序條件?什麼定義了元素的順序? –

回答

0

可以使用Collections.sort函數。基本上這個函數將列表作爲參數,並使用列表中存在的元素的自定義ComparatorComparable接口對其進行排序。

Here是在Java集合排序的文檔(所以也ArrayList)。

這裏List<String>元件定製的比較器的例子(它可被如果API返回List<List<String>>類型的對象使用

public CustomComparator implements Comparator<List<String>> { 
    public int compare(ArrayList<String> o1, ArrayList<String> o2) { 
     return o1.size() - o2.size(); 
    } 
} 

.... 

List<List<String>> myResult = ....; 
Collections.sort(myResult, new CustomComparator()); 
// Here myResult is sorted by size of inner lists. 

注意:如果你喜歡排序的其它方向上簡單地變化比較,功能return o2.size() - o1.size()

+0

Collections.sort不起作用。由於arraylist的arraylist是輸出johnsons週期檢測器。我想按照列表中作者的數量對這些週期進行排序。如果一個ArrayList有6個作者,另一個有5個,那麼我想先放置第二個列表(有5個作者),然後是第一個列表(有6個作者)。 – paras

+0

您必須編寫自定義比較器。 Collections.sort沒有問題。發佈這個庫返回的arrayList的類型,我將添加一個自定義比較器來向你展示如何做到這一點。 –

+0

謝謝。 \t 我有一個圖,其中頂點是作者,邊是共同作者關係。然後我打電話給JohnsonSimpleCycles jSC = new JohnsonSimpleCycles <>(); jSC.setGraph((DirectedGraph )directedGraph);列表 savedElements = jSC.findSimpleCycles();的System.out.println(週期); ArrayList的ArrayList是此函數的輸出。現在我必須根據作者人數排序這些內部列表。 – paras

0

這裏有一個例子如何使用您的comparator通過對象排序Collections.sort

 //this example is a snippet from my actual project, 
     //but it fits your question very well I think 

      Comparator<TMObject> comp = getTmObjectComparator(); 
      int leastTMC = Collections.min(tmObjectList, comp).getTMC(); 

      private Comparator<TMObject> getTmObjectComparator() { 
       return new Comparator<TMObject>() { 


        @Override 
        public int compare(TMObject o1, TMObject o2) { 

        //I compare if the int TMC of Object one 
        //is bigger than the int TMC of Object two 
        //this also works with alphabetical order 

        if (o1.getTMC() > o2.getTMC()) { 

         //returning a Number > 0 means it is superordinate 
         return 1; 
        } 
        //returning a Number < 0 means it is subordinate 
        return -1; 
        } 
       }; 
       } 

如果你的對象是一個字符串,你也可以用o1.compareTo(o2)比較字符串一樣簡單。這相當基本。

0

如果它的ArrayLists的ArrayList我建議你做

for(List<String> list: yourListOfLists){ 
Collections.sort(list); } 

現在,列表中的所有列表進行排序,但你想如何排序的列表中,列出了?

+0

類型不匹配:無法從元素類型對象轉換爲列表 paras

+0

嗯...那麼你有一個對象列表(你可以顯示你如何建立你的列表?)。嘗試Collections.sort(yourListOfLists);如果它有竅門。 – pmartin8

+0

我有一個圖,其中頂點是作者,邊是共同作者關係。然後我打電話給JohnsonSimpleCycles jSC = new JohnsonSimpleCycles <>(); \t jSC.setGraph((DirectedGraph )directedGraph); \t列表 savedElements = jSC.findSimpleCycles(); \t System.out.println(cycles); ArrayList的ArrayList是此函數的輸出。現在我必須根據作者人數排序這些內部列表。 – paras