使用Collections.reverseOrder()对String []进行排序

时间:2013-03-01 11:36:06

标签: java arrays collections

我需要按整数值降序排序String[]。我正在使用String [],因为数组的内容可以是字符串或整数。

按降序排序,

Arrays.sort(rows, Collections.reverseOrder());

其中行包含"14","0","3";

如果string []包含单词,则排序工作正常。

我认为Collections.reverseOrder()不适用于原始类型,但由于使用的是String[]而不是int[],因此属于该类别吗?

如果是这样,我们是否有除了使用for循环之外的排序机制?

4 个答案:

答案 0 :(得分:2)

要求非常具体和不寻常,当然,没有标准的方法。但是你可以提供一个自定义比较器:

Arrays.sort(rows, new Comparator<String>()
{
    public int compare(String o1, String o2)
    {
         return Integer.parseInt(o2) - Integer.parseInt(o1);
    }
});

如果字符串具有不可解析的整数并处理NumberFormatException,则必须决定该怎么做。

答案 1 :(得分:1)

问题是字符串的自然顺序与数字的自然顺序不同:"1" < "11" < "2"而不是1 < 2 < 11。 这是写自己的比较器的问题:

    Arrays.sort(rows, new Comparator<String>() {
        public int compare(String o1, String o2) {
            return -(Integer.parseInt(o1) - Integer.parseInt(o2));
        }
    });

它将使用每个字符串的整数值 - 如果任何字符串不是整数,它将崩溃 - 并且它将给出相反的顺序,因为它返回-正常值。它也是低效的,因为它会在每次比较中解析每个字符串。

答案 2 :(得分:0)

如果要按数字顺序排序,则需要数字类型,而不是String。您可以创建一个Integer数组并对其进行排序。

答案 3 :(得分:0)

使用alphabeticaly字符串完成排序。字符串"3"自此大于"14" char '3'大于char '1'(反向)。

你需要传递一个自己的比较器,在比较它们之前将字符串转换为整数或者使用整数形式,因此它们具有相同的数字位数并领先0

如果在同一个数组中有一个数字作为字符串,那么你不能得到数字的数字。