在java中排序字符串数集

时间:2014-09-19 12:26:10

标签: java sorting collections set

我需要对一组字符串进行排序,其中包含数字。Ex: [15, 13, 14, 11, 12, 3, 2, 1, 10, 7, 6, 5, 4, 9, 8]。我需要将其排序为[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]。但是当我使用Collections.sort(keyList);时,其中keyList是Set,我得到的结果是[1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9]。请帮忙。

5 个答案:

答案 0 :(得分:2)

编写自定义比较器并将其解析为Collections.sort(Collection,Comparator)的参数。一种解决方案是将字符串解析为整数。

    Collections.sort(keyList, new Comparator<String>()
    {
        @Override
        public int compare(String s1, String s2)
        {
            Integer val1 = Integer.parseInt(s1);
            Integer val2 = Integer.parseInt(s2);
            return val1.compareTo(val2);
        }
    });

答案 1 :(得分:0)

你可以尝试:

final int[] searchList =
        new int[] { 15, 13, 14, 11, 12, 3, 2, 1, 10, 7, 6, 5, 4, 9, 8 };
Arrays.sort(searchList);

结果是:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

列表必须为int

答案 2 :(得分:0)

首先将String转换为Integer

List<Integer> ints = new ArrayList<>();
for (String s : strings)
    ints.add(Integer.parseInt(s));
Collections.sort(ints);

如果您不需要重复值,则可以使用SortedSet来自动维护订单:

SortedSet<Integer> ints = new TreeSet<>();
for (String s : strings)
    ints.add(Integer.parseInt(s));
// all done!

答案 3 :(得分:0)

您的字符串将按自然顺序排序为字符串,而不是数字。因此,"11"位于"10"之后,"2"将位于"11111111110"之后。

怎么做?。

使用Integer.parseInt()将集合中的每个String值解析为整数,然后将它们添加到集合中并调用Collections.sort()

答案 4 :(得分:0)

你可以像Kai说的那样做,并将你的String转换为整数并进行比较

但这是昂贵的操作,我建议这是:

 keyList.sort(new Comparator<String>() {

        @Override
        public int compare(String o1, String o2) {
            if (o1.length() == o2.length()){
                return o1.compareTo(o2);
            }
            return o1.length() - o2.length();
        }
    });

如果您的号码长度相同,则使用String.compareTo进行比较,否则按顺序对它们进行排序,因此1 2 3将自动在11 22等之前