在我的数组中的java -sort索引元素中排序2d String数组

时间:2015-04-27 16:02:40

标签: java arrays string sorting

嗨我需要在java中对数组二维进行排序,但我需要通过我的数组中的索引进行排序 我的数组是

  String arr[][]={  {"joun","1525565","10"},
                           {"ALI","15256562","100"},
                           {"FATEH","1525534","20"}   };

我需要按索引号2对数组进行排序 输出是

   String arr[][]={ {"ALI","15256562","100"},
                       {"FATEH","1525534","20"},
                         {"joun","1525565","10"} };

我的订单必须是100,然后是20,然后是10

我试图把这个代码放在java中把程序弄错的问题从索引1和2中搞砸了 我用里面的循环  Arrays.sort(ARR [I])

2 个答案:

答案 0 :(得分:5)

在Java 8中,您可以将其编写为按索引2排序,以便使用

减少数字顺序
Arrays.sort(arr, Comparator.comparing(row -> -Long.parseLong(row[2])));

Arrays.sort(arr, Comparator.comparing((String[] row) -> Long.parseLong(row[2]))
                           .reversed());

升序为String而不是数字。

Arrays.sort(arr, Comparator.comparing(row -> row[2]));

这会订购10, 100, 20,但如果您在较短的字符串之前填写更长的字符串。

Arrays.sort(arr, Comparator.comparing((String[] row) -> row[2].length()).reversed()
                           .thenComparing(row->row[2]));

这会将订单设为100, 10, 20

BTW:我不知道为什么第一个row需要给出的类型。

如果您想按号码排序,可以

Arrays.sort(arr, Comparator.comparing(row -> Long.parseLong(row[2])));

这会使10, 20, 100按升序排列。

在Java 8中,您可以添加一个匿名内部类来执行相同的操作。

答案 1 :(得分:1)

以下是Comparator的解决方案:

public class SortTest {
    public static void main(String[] args) {
        String arr[][]={  {"joun","1525565","10"},
                {"ALI","15256562","100"},
                {"FATEH","1525534","20"}   };

        Arrays.sort(arr, new Comparator<String[]>() {
            @Override
            public int compare(String[] o1, String[] o2) {
                return Integer.parseInt(o2[2]) - Integer.parseInt(o1[2]);
            }
        });

        for (String[] item : arr) {
            System.out.println(Arrays.toString(item));
        }
    }
}