我有一个价值观的arraylist ... ST1000,ST 5000,ST 30000,ST400,ST500,SP1000,SP600
我想要它像ST1000,ST2000,ST3000,ST4000,SP600,SP1000一样排序。我该怎么做?
由于
答案 0 :(得分:0)
你可以使用compareTo
,它会按字典顺序对你进行比较
这里有两种使用java 8对列表进行排序的方法
list.stream()
.sorted((s1, s2) -> s1.compareTo(s2)).collect(Collectors.toList());
list.sort((s1, s2)->s1.compareTo(s2));
使用java 8,您不必使用Collections.sort方法
答案 1 :(得分:0)
您可以使用Collections.sort(List<T> list, Comparator<? super T> c)
方法以所需方式对任何集合进行排序。
您需要做的就是相应地实现Comparator's
compare
方法。
在你的特定情况下,它会是这样的:
List<String> list = Arrays.asList("ST1000", "ST5000", "ST30000", "ST400", "ST500", "SP1000", "SP600");
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String o1Prefix = o1.substring(0, 2);
String o2Prefix = o2.substring(0, 2);
if (o1Prefix.equals(o2Prefix)) {
return Integer.parseInt(o1.substring(2, o1.length())) > Integer.parseInt(o2.substring(2, o2.length())) ? 1 : -1;
} else if (o1Prefix.equals("ST")) {
return -1;
} else {
return 1;
}
}
});
答案 2 :(得分:0)
你可以创建一个自定义的Comparator对象,并使用所需的逻辑覆盖compare方法。
Comparator<Model> customComparator = new Comparator<Model>() {
public int compare(Model arg0, Model arg1) {
//TODO custom sort logic
}
};
如果compare返回-1则arg0小于arg1,0等于1大
然后使用自定义比较器
对列表进行排序 Collections.sort(list, customComparator);