0

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

12,香草燕麦棒,91。

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

4

1 回答 1

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要比较的 s 中的任何一个实际上是否符合 的要求,例如Comparator,我也不会处理第一个元素不是数字的情况。

更好的解决方案是将您String的值包装到 POJO 中,或者interface提供适当的适当吸气剂。这将允许您将其限制Comparator为特定类型的类,使其更安全

于 2013-10-31T01:08:49.350 回答