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