Java排序数组由第三个元素组成

时间:2017-01-11 21:38:43

标签: java arrays sorting

我想在它的下行第三列对String数组后代进行排序,问题是我想按它的数值排序。

示例:

如果我最初有这个数组:

String [][] array = new String[][] {
  {"Barcelona", "156", "1604"}, 
  {"Girona", "256", "97"},
  {"Tarragona", "91", "132"},
  {"Saragossa", "140", "666"}
}

我希望它成为这个:

{
  {"Barcelona", "156", "1604"}, 
  {"Saragossa", "140", "666"}, 
  {"Tarragona", "91", "132"}, 
  {"Girona", "256", "97"}
}

我该怎么做?

2 个答案:

答案 0 :(得分:5)

按asc排序:

Arrays.sort(array, Comparator.comparingInt(a -> Integer.valueOf(a[2])));

按desc排序:

Arrays.sort(array, Comparator.comparingInt(a -> Integer.valueOf(a[2])*-1)); 
// or this
Arrays.sort(array, Comparator.comparingInt((String[] a) -> Integer.valueOf(a[2])).reversed());

答案 1 :(得分:4)

您可以实施自定义Comparator<String[]>来执行比较。像,

String[][] array = new String[][] { { "Barcelona", "156", "1604" }, 
        { "Girona", "256", "97" }, { "Tarragona", "91", "132" }, 
        { "Saragossa", "140", "666" } };
Arrays.sort(array, new Comparator<String[]>() {
    @Override
    public int compare(String[] o1, String[] o2) {
        return Integer.valueOf(o2[2]).compareTo(Integer.valueOf(o1[2]));
    }
});
System.out.println(Arrays.deepToString(array));

哪些输出(根据要求)

[[Barcelona, 156, 1604], [Saragossa, 140, 666], [Tarragona, 91, 132], [Girona, 256, 97]]

另请参阅Object Ordering - The Java Tutorials(尤其是“编写自己的可比类型”小节)以获取更多信息。