2014-12-30 49 views
-1

這是迄今爲止,雖然數組的大小需要改變的代碼。我需要使用循環向數組添加值;要做到這一點,我想我需要使用嵌套的ArrayList。但是,我是否能夠按照我已經完成的方式對ArrayList進行排序,或者有什麼方法可以將其添加到此數組中?排序/創建嵌套ArrayList

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

    String[][] data = new String[][] { 
      new String[] { "Roy","3", "12" }, 
      new String[] { "Daniel","5", "22" }, 
      new String[] { "Joe","2", "3" }, 
      new String[] { "Ryan","4", "4" }, 
      new String[] { "Leroy","2", "5" }, 
      new String[] { "Smith","1", "6" },}; 



    Arrays.sort(data, new Comparator<String[]>() { 
     @Override 
     public int compare(String[] entry1, final String[] entry2) { 
      String st1 = entry1[2]; 
      String st2 = entry2[2]; 
      int n1 = Integer.parseInt(st1); 
      int n2 = Integer.parseInt(st2); 
      return Integer.compare(n2, n1); 

     } 
    }); 




    for (String[] s : data) { 
     System.out.println(s[0] + "   " + s[1]+ "   " + s[2]); 
    } 

} 
+0

申報'data'如'列表'(或'的ArrayList ')和使用'Collections.sort'排序。你甚至可以使用相同的比較器。 – MPirious

回答

0

呀,似乎並不成爲一個問題。代替String[][](串數組的數組),改變的dataArraylist<String[]>(陣列列表或字符串數​​組)的類型。所以這看起來像:

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

    ArrayList<String[]> data = new ArrayList<String[]>(); 
    data.add(new String[] { "Roy","3", "12" }); 
    data.add(new String[] { "Daniel","5", "22" }); 
    data.add(new String[] { "Joe","2", "3" }); 
    data.add(new String[] { "Ryan","4", "4" }); 
    data.add(new String[] { "Leroy","2", "5" }); 
    data.add(new String[] { "Smith","1", "6" }); 

    Collections.sort(data, new Comparator<String[]>() { 
     @Override 
     public int compare(String[] entry1, final String[] entry2) { 
      String st1 = entry1[2]; 
      String st2 = entry2[2]; 
      int n1 = Integer.parseInt(st1); 
      int n2 = Integer.parseInt(st2); 
      return Integer.compare(n2, n1); 
     } 
    }); 

    //Other stuff... 
} 

也許你的意思是你想要內部字符串數組是動態可變的。這也不是問題,它完全按照你的想法嵌套。

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

    String[][] rawData = new String[][] { 
     new String[] { "Roy","3", "12" }, 
     new String[] { "Daniel","5", "22" }, 
     new String[] { "Joe","2", "3" }, 
     new String[] { "Ryan","4", "4" }, 
     new String[] { "Leroy","2", "5" }, 
     new String[] { "Smith","1", "6" }}; 

    ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>(); 
    for(String[] arr : rawData){ 
     ArrayList<String> a = new ArrayList<String>(); 
     data.add(a); 
     for(String s : arr){ 
      a.add(s); 
     } 
    } 

    Collections.sort(data, new Comparator<ArrayList<String>>() { 
     @Override 
     public int compare(ArrayList<String> entry1, ArrayList<String> entry2) { 
      String st1 = entry1.get(2); 
      String st2 = entry2.get(2); 
      int n1 = Integer.parseInt(st1); 
      int n2 = Integer.parseInt(st2); 
      return Integer.compare(n2, n1); 
     } 
    }); 

    //Other stuff... 
} 

在這兩種情況下,您都應該小心比較器訪問索引2。如果數組(或數組列表)長度只有1,會發生什麼?在這種情況下你想要比較器做什麼?它們是希望是整數但可能不是的字符串列表。如果要比較12到「hello」,你想讓比較器做什麼?

+0

感謝您解釋它 – Duda777