2012-01-06 99 views
2

我有一個問題,我通過調用服務得到一個JSON響應,我得到名稱,位置,位置,電子郵件,電話號碼字段。每個字段都存儲在其ArrayList中。我在Listview中顯示這些值。如何排序多個arraylist

現在我必須按排序順序顯示名稱,但其他字段也應該按相應的名稱排列。

我們可以通過使用Collection.sort(nameArrayList)進行排序,但其他字段會受到怎樣的影響? 如何以有效的方式做到這一點?任何想法??

謝謝。

+0

看到我的更新答案.. – 2012-01-06 06:51:02

+0

U可以使用比較http://www.javadeveloper.co.in/java-example/java-comparator-example.html 請參考此鏈接。 – Richa 2012-01-06 05:48:24

回答

1

創建一個hashMap<String name ,pojo values); 現在讀取每個名稱並將相應的值位置,位置,電子郵件,電話號碼存儲到pojo對象中。

map.put(name , pojo) ; 
將所有的值按名稱排序圖之後

。 無論使用HashMap來填充列表,遍歷鍵和值,並使用它們

當名字被重複

更好地使用ArrayList用自己的比較。 通過這個代碼片段以獲取更多幫助

public class Main { 

    String name = null; 

    // 2011-12-11 11:30:20:0 
    public static void main(String[] args) { 

    ArrayList<Main> main = new ArrayList<Main>(); 
    main.add(new Main("CRohit")); 
    main.add(new Main("DRohit")); 
    main.add(new Main("ARohit")); 
    main.add(new Main("12349")); 
    main.add(new Main("BRohit")); 
    main.add(new Main("ZRohit")); 
    main.add(new Main("12345")); 
    main.add(new Main("FRohit")); 
    main.add(new Main("12348")); 
    main.add(new Main(null)); 
    main.add(new Main(null)); 

    Collections.sort(main, new PojoComparator()); 
    for(Main m : main) 
    { 
     System.out.println(m.getName()); 
    } 


    } 

    public Main(String name) 
    { 
     this.name = name; 
    } 

    public String getName() 
    { 
     return name; 
    } 

    class ChildProfileComparator implements Comparator<Main> { 



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

     String firstName = o1.getName(); 
     String secondName = o2.getName(); 

     if (firstName == null) { 
      return +1; 
     } 
     if (secondName == null) { 
      return -1; 
     } 

     if(isNumber(firstName) && isNumber(secondName)) 
     { 
      double d1 = Double.parseDouble(firstName); 
      double d2 = Double.parseDouble(secondName); 

      return (d1>d2)?+1:-1; 
     } 

     if(isNumber(firstName)) 
     { 
      return +1; 
     } 
     if(isNumber(secondName)) 
     { 
      return -1; 
     } 
     return o1.getName().compareTo(o2.getName()); 
    } 

    public boolean isNumber(String x) 
    { 
     if(x == null) 
     { 
      return false; 
     } 
     return x.matches("^-?\\d+(\\.\\d+)?$"); 
    } 
} 
} 
+0

你好Shailendra,謝謝你的迴應。我按照你所建議的方式做了同樣的工作,但它有效,但是有一種情況,當任何兩個人的名字相同時,它將只顯示一個信息,因爲在HashMap中key必須是唯一的。 – Himanshu 2012-01-06 10:27:44

+0

哦對。我想現在你應該使用包含名稱和其他值的pojo的ArrayList,現在創建一個Comparator,它可以在這個Pojo中按名稱對元素進行排序。搜索比較器更多的想法。 – 2012-01-07 10:51:45

1

結帳this Blog有關於ListView的內容的排序的完整說明。

您也可以從Here獲得源(注 - 還沒有檢查)

0

而不是存儲在自己的數組列表中的每個領域,爲什麼不創建一個類來表示每個對象以使得類將有場姓名,地址,職位,電子郵件和電話號碼。在解析JSON時,創建上述對象的一個​​實例,並將其放入ArrayList中。通過實現一個可比較的接口來使對象Comparable ..您的compareTo函數將簡單地取消引用輸入對象的名稱對象,並與當前對象進行比較。

這裏看到更多的信息: http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html