在java中我有一个字符串数组列表,每个条目的格式如下
12,香草燕麦棒,91。如何按每个字符串的第一个数字的递增顺序对列表进行排序? collections.sort()能够做到吗?
答案 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
限制为特定类型的类,使其更安全