在Java中对Array的ArrayList进行排序

在Java中对ArrayList进行排序的最佳方法是什么?

String []是……

 String[] = new String[] { "abc", "abc", "abc", "abc", "abc", "abc", "abc" }; 

现在我想用String []的第二个值(在索引1处)对整个ArrayList进行排序。 我需要循环遍历每个String [],然后循环遍历索引1处的子节点。

有任何想法吗?

EDITED


我有更多的描述。 我实际上从一些XML文件获取学校,XML中的每个节点都有7个属性。 现在我正在创建一个String []的ArrayList,它从XML中保存那些学校节点,而String []数组本身保存着特定节点的属性。

现在,我想对它进行排序的方式是,它应该根据学校的状态进行排序,这是XML中的第二个属性和ArrayList中String []中的索引1。

我需要首先遍历每个学校(XML中的节点,Java中的String [])然后我将必须过滤State(XML中的State属性,Java中的String [1])。

现在清楚了吗?

从Collections.sort开始, 这是一个自定义Comparator 。 您还需要为此编写自定义Comparator 。

例如,假设您希望依赖于compareTo方法中定义的字符串的自然顺序:

 public static void main(String[] args) throws Exception { ArrayList listOfStringArrays = new ArrayList(); listOfStringArrays.add(new String[] {"x","y","z"}); listOfStringArrays.add(new String[] {"a","b","c"}); listOfStringArrays.add(new String[] {"m","n","o"}); Collections.sort(listOfStringArrays,new Comparator() { public int compare(String[] strings, String[] otherStrings) { return strings[1].compareTo(otherStrings[1]); } }); for (String[] sa : listOfStringArrays) { System.out.println(Arrays.toString(sa)); } /* prints out [a, b, c] [m, n, o] [x, y, z] */ } 

您可以像这样创建一个Comparator

 new Comparator() { public int compare(String[] first, String[] second) { return first[1].compareTo(second[1]); } } 

然后将它传递给Collections.sort()

您可能想要检查第二个元素是否实际存在于数组中。 如果标准字符串比较不够,您也可以进行自定义比较。

您编写一个Comparator ,它将两个String[]与正确的子项进行比较,然后将其传递给Collections.sort(List list, Comparator c)

根据您的编辑:您的String []应该是一个包含您的属性的School对象。 使您的School对象实现Comparable,并允许使用Collections.sort()轻松排序。

使用Java 8非常容易。只需写:

 list.sort(Comparator.comparing(a -> a[1])); 

例如,以下代码:

 List list = Arrays.asList( new String[] { "abc", "abc", "abc", "abc", "abc", "abc", "abc" }, new String[] { "xyz", "xyz", "xyz", "xyz", "xyz", "xyz", "xyz" }, new String[] { "fgh", "fgh", "fgh", "fgh", "fgh", "fgh", "fgh" }); list.sort(Comparator.comparing(a -> a[1])); list.stream().map(Arrays::toString).forEach(System.out::println); 

会产生想要的结果:

 [abc, abc, abc, abc, abc, abc, abc] [fgh, fgh, fgh, fgh, fgh, fgh, fgh] [xyz, xyz, xyz, xyz, xyz, xyz, xyz]