Java中数组的排序ArrayList

Java中数组的排序ArrayList,java,arrays,sorting,Java,Arrays,Sorting,在Java中排序ArrayList的最佳方法是什么 其中字符串[]是 String[] = new String[] { "abc", "abc", "abc", "abc", "abc", "abc", "abc" }; 现在我想按字符串[](在索引1处)的第二个值对整个ArrayList进行排序。我需要遍历每个字符串[],然后遍历它在索引1处的子字符串 有什么想法吗 编辑 我有更多的描述。我实际上是从一些XML文件中获取数据,XML中的每个节点都有7个属性。现在我正在创建一个String

在Java中排序
ArrayList
的最佳方法是什么

其中字符串[]是

String[] = new String[] { "abc", "abc", "abc", "abc", "abc", "abc", "abc" };
现在我想按字符串[](在索引1处)的第二个值对整个ArrayList进行排序。我需要遍历每个字符串[],然后遍历它在索引1处的子字符串

有什么想法吗

编辑


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

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

我需要首先遍历每个学校(XML中的节点,Java中的字符串[]),然后我必须过滤状态(XML中的状态属性,Java中的字符串[1])


现在清楚了吗?

您编写了一个
比较器,通过正确的子级比较两个
字符串[]
,然后将其传递给
集合。排序(List List List,Comparator使用TreeSet或TreeMap开始。您还需要为此编写一个自定义

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

public static void main(String[] args) throws Exception {
        ArrayList<String[]> listOfStringArrays = new ArrayList<String[]>();
        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<String[]>() {
            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]
        */ 

    }
publicstaticvoidmain(字符串[]args)引发异常{
ArrayList listOfStringArrays=新的ArrayList();
添加(新字符串[]{“x”、“y”、“z”});
add(新字符串[]{“a”、“b”、“c”});
add(新字符串[]{“m”、“n”、“o”});
排序(ListofStringArray,新的Comparator(){
公共整数比较(字符串[]字符串,字符串[]其他字符串){
返回字符串[1]。比较到(其他字符串[1]);
}
});
for(字符串[]sa:ListofStringArray){
System.out.println(Arrays.toString(sa));
}
/*打印出来
[甲、乙、丙]
[m,n,o]
[x,y,z]
*/ 
}

您可以创建一个比较器,如下所示:

new Comparator<String[]>() {
  public int compare(String[] first, String[] second) {
    return first[1].compareTo(second[1]);
  }
}
新比较器(){
公共整数比较(字符串[]第一,字符串[]第二){
返回第一个[1]。比较(第二个[1]);
}
}
然后将其传递给
Collections.sort()


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

根据您的编辑:您的字符串[]应该是包含属性的学校对象。使学校对象实现可比性,这将允许使用集合轻松排序。sort()。

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

list.sort(Comparator.comparing(a -> a[1]));
例如,以下代码:

List<String[]> 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);

假设我们有一个数组列表
[[“x”、“y”、“z”]、[“a”、“b”、“c”]、[“m”、“n”、“o”]

我们可以使用list.sort()而不是Collections.sort()

为了排序,我们可以使用lambda和方法引用采用更干净的方法

使用lambda:

listofstring.sort((a,b)->a[1]。compareTo(b[1]);
使用方法参考:

listofstring.sort(Comparator.comparing(a->a[1]);
产出:

[a,b,c]
[m,n,o]
[x,y,z]

我在任何地方都看不到任何ArrayList,而且字符串数组中的所有内容都是相同的……请尝试进一步解释,发布一些输入参数和例外结果。如果使用对象而不是列表、数组和字符串,你会得到很好的服务。Java是一种面向对象的语言。你会遇到麻烦,因为你也在思考低级XML不是一个好的抽象。我在想它将如何按状态按升序对整个ArrayList进行排序?它将按Jorn和我表示它的方式升序排列。如果您希望它按另一个顺序排列,那么您可以对String.compareTo(String)返回的值求反,或者只调用Collections.reverse(yourList)在你第一次分类之后。
[abc, abc, abc, abc, abc, abc, abc]
[fgh, fgh, fgh, fgh, fgh, fgh, fgh]
[xyz, xyz, xyz, xyz, xyz, xyz, xyz]