使用字符串和整数对Java中的ArrayList进行排序

时间:2016-05-11 09:10:56

标签: java arrays sorting arraylist

我在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之前排序。

有没有办法正确排序?

3 个答案:

答案 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]