2015-09-22 63 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