在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
。
使用TreeSet或TreeMap http://download.oracle.com/javase/6/docs/api/java/util/TreeSet.html
根据您的编辑:您的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]