我在Java中有一个字符串的ArrayList。所有字符串都具有[Integer] [String]格式。例如:
100 Tom Dsa
23 John Asdf
98 Mary Qwerty
我想通过Integer对这个ArrayList进行排序。正确的输出是:
23 John Asdf
98 Mary Qwerty
100 Tom Dsa
现在,我使用以下代码:
Collections.sort(obj);
它的问题是将整数解释为字符串,因此100在2之前排序。
有没有办法正确排序?
答案 0 :(得分:2)
一种方法:您可以编写一个自定义Comparator
,使用java.util.Scanner
从String中扫描int值,并将它们比较为:
Collections.sort(obj, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return new Scanner(s1).nextInt() - new Scanner(s2).nextInt();
}
});
编辑:当可能存在少量前导空格时,使用Scanner
来解析Integer
是安全的:
" 98 Mary Qwerty"
而不是"98 Mary Qwerty"
答案 1 :(得分:2)
如果List中的元素总是像Integer和String那样用空格分隔,可以使用下面的
Collections.sort(obj, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return Integer.parseInt(s1.split("\\s+")[0]) - Integer.parseInt(s2.split("\\s+")[0]);
}
});
答案 2 :(得分:0)
Map<Integer, String> map = new TreeMap<Integer, String>();
for (String string : obj) {
String key = string.substring(0, string.indexOf(" "));
map.put(Integer.valueOf(key),
string.substring(key.length(), string.length()));
}
obj.clear();
for (Map.Entry<Integer, String> entry : map.entrySet()) {
obj.add(entry.getKey().toString()+entry.getValue());
}
System.out.println(obj);
OUTPUT ::
[23 John Asdf,98 Mary Qwerty,100 Tom Dsa]