2014-12-30 32 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