我需要按整数值降序排序String[]
。我正在使用String [],因为数组的内容可以是字符串或整数。
按降序排序,
Arrays.sort(rows, Collections.reverseOrder());
其中行包含"14","0","3"
;
如果string []包含单词,则排序工作正常。
我认为Collections.reverseOrder()
不适用于原始类型,但由于使用的是String[]
而不是int[]
,因此属于该类别吗?
如果是这样,我们是否有除了使用for循环之外的排序机制?
答案 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
。
如果在同一个数组中有一个数字作为字符串,那么你不能得到数字的数字。