2012-12-29 69 views
0

我有一個有兩個字段Name和Year的數組列表。我想用條件輸入名稱對這個數組進行排序(按名稱輸入排序)。如果名稱相同,則按年份排序。使用ArrayList輸入條件輸入Android

Example 
Name  Year 
Ann  2000 
Bech  2001 
Bach  2013 
Bach  2012 
Chu  1999 

假設我創建的函數是sort,輸入是Bach。其結果將顯示

Name  Year 
Bach  2013 
Bach  2012 
Ann  2000 
Bech  2001 
Chu  1999 

因爲與輸入巴赫和第一我要與「巴赫」顯示所有名稱如果相同的名稱,我將在今年對其進行排序(最大 - 最小)。如果不相同的「Bach」名稱,我將按A-Z使用compareTo() 這是我的代碼,但我沒有輸入條件名稱。請新功能幫助我一樣sort_inputname(字符串inputname)

//Class compare Name- Year 
public class Search_Name_Year_Comparator implements Comparator<SearchListInformation> 
{ 


      public int compare(SearchListInformation left, 
        SearchListInformation right) { 
       // TODO Auto-generated method stub 
       int dateComparison; 
        int dataComparison = 0; 
     if(left.getName().compareTo(right.getName())==0) 
      { 
      if(left.getYear().compareTo(right.getYear())>0) 
      { 
      return -1; 
      } 
      else if(left.getYear().compareTo(right.getYear())<0) 
      { 
       return 1; 
      } 
      else 
       return 0; 


      } 
     else 
     return left.getName().compareTo(right.getName()); 
+0

有什麼問題嗎? – Shark

回答

0

這是一個有點很難理解你的問題(我假設你是不是以英語爲母語,但你不能責怪那)。據我所知,你想排序一個ArrayList的對象有2個屬性:名稱和年份。我們假設這些對象被稱爲「SearchListInformation」,所以你試圖對SearchListInformation的ArrayList進行排序。

我在這裏要做的是使SearchListInformationclass實現Comparable(不是比較器)接口(請參閱鏈接瞭解更多信息)。 然後你可以用中庸之道來Collections.sort排序ArrayList中,例如:

ArrayList<SearchListInformation> list = new ArrayList<SearchListInformation>(); 
    list.add(new Person("Bob", 2000)); 
    list.add(new Person("Lucy", 2010)); 
    Collections.sort(list); 

如果你想使用Comparator接口,您也可以使用Collections.sort(名單,比較)。然後你可以使用你發佈的代碼,但我會簡化這樣說:

@Override 
    public int compare(SearchListInformation left, SearchListInformation right) { 
     if(left.getName().compareTo(right.getName())==0) 
      return -1*left.getYear().compareTo(right.getYear()) 
     else 
      return left.getName().compareTo(right.getName()); 
    } 

編輯:如果你希望能夠指定應在列表的開頭總是一個名字,你應該使用第二個選項:實現Comparator接口這樣的:

public MyComparator implements Comparator<SearchListInformation> { 

     protected String _priorityName; 

     public MyComparator(String priorityName) { 
      _priorityName = priorityName; 
     } 

     @Override 
     public int compare(SearchListInformation left, SearchListInformation right) { 
      if(left.getName().compareTo(right.getName())==0) 
       return -1*left.getYear().compareTo(right.getYear()) 
      else if(left.getName().equals(_priorityName) 
       return -1; 
      else if(right.getName().equals(_priorityName) 
       return 1; 
      else 
       return left.getName().compareTo(right.getName()); 
     } 

    } 

然後你可以使用:

Collections.sort(list, new MyComparator("Bach")); 
+0

你不明白我的問題。我的問題是按名稱輸入排序。不是A-> Z。假設我有名字A,B,C,D。我想用名稱input = B進行排序。這意味着結果將B,A,C,D。你可以幫我嗎? – user1936709

+0

對不起,我編輯了答案,這樣可以完成。 – personne3000

+0

非常感謝。這是很好的解決方案 – user1936709