【问题标题】:Java sort array by the third elementJava 按第三个元素排序数组
【发布时间】:2017-01-11 21:38:43
【问题描述】:

我想通过它的第三列降序对一个字符串数组后代进行排序,问题是我想按它的数值排序。

例子:

如果我最初有这个数组:

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"}
}

我该怎么做?

【问题讨论】:

标签: java arrays sorting


【解决方案1】:

按升序排序:

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

按降序排序:

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());

【讨论】:

    【解决方案2】:

    您可以实现自定义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(尤其是“编写您自己的可比较类型”小节)了解更多信息。

    【讨论】:

    • 问题是我不知道如何使用比较器,有什么好的指南或视频吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    相关资源
    最近更新 更多