如何在字符串的开头用数字对字符串数组进行排序?

时间:2013-10-31 01:05:21

标签: java sorting methods

在java中我有一个字符串数组列表,每个条目的格式如下

12,香草燕麦棒,91。

如何按每个字符串的第一个数字的递增顺序对列表进行排序? collections.sort()能够做到吗?

1 个答案:

答案 0 :(得分:3)

  

collections.sort()能够做到这一点吗?

是的,但是,您需要自定义Comparator才能提取主要值并进行适当比较

这是概念的非常基本示例......

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class CustomSorter {

    public static void main(String[] args) {
        List<String> values = new ArrayList<>(25);
        values.add("12,Vanilla granola bar,91");
        values.add("1,Vanilla granola bar,91");
        values.add("50,Vanilla granola bar,91");
        values.add("25,Vanilla granola bar,91");
        values.add("13,Vanilla granola bar,91");

        dump(values);

        Collections.sort(values, new SplitComparator());

        dump(values);
    }

    protected static void dump(List<String> values) {
        System.out.println(values);
    }

    public static class SplitComparator implements Comparator<String> {

        @Override
        public int compare(String o1, String o2) {
            int i1 = getIndex(o1);
            int i2 = getIndex(o2);

            return i1 - i2;
        }

        protected int getIndex(String o1) {
            return Integer.parseInt(o1.split(",")[0]);
        }
    }
}

应该注意的是,有很多事情可能会出错,这并不好笑。我没有做任何检查以确定要比较的String中的任何一个实际上是否满足Comparator的要求,我也不处理第一个元素不是数字的情况。 / p>

更好的解决方案是将String值包装到POJO或interface中,并提供适当的适当的getter。这样您就可以将Comparator限制为特定类型的类,使其更安全