2015-08-28 158 views
0

我们有一个场景,我们不得不根据名称和基于名称的列表对象对列表对象进行排序。请找到下面的Java对象。对列表对象排序列表

制作类

class Make implements comparable<Make> { 
    String name; 
    List<Model> models; 
    .... 
    getter.. 
    setters.. 

    @Override 
    public intcompareTo(object o) { 
     return name.compareTo(o.name); 
    } 
} 

模型类

class Model implements comparable<Model> { 
    String name ; 
    .... 
    getter.. 
    setters.. 

    @Override 
    public intcompareTo(object o) { 
     return name.compareTo(o.name); 
    } 
} 

主类

class main { 
    public static void main(String[] args) { 

     List<Make> make = new ArrayList<Make>(); 
     Make make1 = new Make(); 
     make1.addName("B"); 

     Model model1 = new Model() 
     model1.setName ("B"); 
     make1.addModel(model1); 

     Model model2 = new Model() 
     model2.setName ("A"); 
     make1.addModel(model2); 

     make.add(make1); 

     // This will sort the make Object but not the model. 
     collections.sort(make); 
    } 
} 

我们想排序两个品牌和型号的名称。 如何在上述场景中对两种模型进行排序。

+0

您将无法使用一次调用'Collections.sort' - 你必须得到每个成员列表并单独排序。 – twentylemon

回答

2

迭代通过每个制作对象元素和排序它的榜单领域

for(Make makeElement : make) 
{ 
    Collections.sort(makeElement.models); 
} 
0

个人而言,我会用@詹姆斯的解决方案去。

,但如果你真的想用一个呼叫进行排序的一切(注意内部是很多很多电话:))

变化Make.intcompareTo(object 0)到:

public intcompareTo(object 0) 
{ 
    if(models!=null){ 
    Collection.sort(models); 
    } 
    return name.compareTo(o.name); 
} 
+0

每次调用“compareTo”时都进行排序,这不仅意味着在外部列表较大的情况下进行不必要的排序操作。在问题的实际例子中,外部列表的大小为* 1 *,'compareTo'永远不会被调用。 – Holger