如何对String或2d多维数组进行排序?

时间:2017-05-24 09:29:53

标签: java arrays multidimensional-array

基本上我有:

String[][] mda = {{"Hello ma", "3"},
                  {"How r u?", "2"},
                  {"i m fine", "5"}};

准确地说,我想根据它的数值对此数组进行排序,如下所示:

"How r u?", "2"
"Hello ma", "3"
"i m fine", "5"

问候< 3

4 个答案:

答案 0 :(得分:5)

这样简单的事情应该可以解决问题。

String[][] mda = {{"Hello ma", "3"},
        {"How r u?", "2"},
        {"i m fine", "5"}};

public void test() {
    System.out.println(Arrays.deepToString(mda));
    Arrays.sort(mda, Comparator.comparing(s -> s[1]));
    System.out.println(Arrays.deepToString(mda));
}

答案 1 :(得分:0)

你应该将它们放在Map中。您可以按键(整数)对它们进行排序,并按顺序访问它们的值(字符串)。

这看起来像是:

Map<Integer, String> myMap = new HashMap<>();
for (String[] tmp : myStrings)
{
    myMap.put(Integer.parseInt(tmp[0]), tmp[1]);
}

答案 2 :(得分:0)

您应该使用比较器对特定索引的数组进行排序

 String[][] mda = {{"Hello ma", "3"},
                {"How r u?", "2"},
                {"i m fine", "5"}};
         Arrays.sort(mda, new Comparator<String[]>() {
                @Override
                public int compare(final String[] data1, final String[] data2) {
                    final String value1 = data1[1];
                    final String value2 = data2[1];
                    return value1.compareTo(value2);
                }
            });

            for (final String[] str : mda) {
                System.out.println(str[0] + " " + str[1]);
            }

答案 3 :(得分:0)

Arrays.sort(mda, (o1, o2) -> Integer.parseInt(o1[1]) - Integer.parseInt(o2[1]) );

Arrays.stream(mda).forEach(l ->
  {
      System.out.println(Arrays.deepToString(l));
  });

或者如果你喜欢这些流:

List<String[]> collect = Arrays.stream(mda)
                               .sorted((o1, o2) -> Integer.parseInt(o1[1]) - Integer.parseInt(o2[1]))
                               .collect(Collectors.toList());

collect.forEach(l ->
  {
      System.out.println(Arrays.deepToString(l));
  });