我在使用Comparator对数字字符串进行排序时遇到问题,我的数据如下: {7.5 mg / 5 ml,5 mg,5 mg / 5 ml,10 mg,5 mg / 15 ml,5 mg / 5 ml,样品,切片}
我尝试了以下代码
Collections.sort(List<Record> records, new Comparator<Record>(){
@Override
public int compare(Record o1, Record o2) {
return o1.compareTo(o2);
}
}
当我按升序排序时,得到以下输出 {10 mg,5 mg,5 mg / 5 ml,5 mg / 15 ml,5 mg / 5 ml,7.5 mg / 5 ml,样品,切片}
在上面的输出中,分母没有正确分类为5毫克系列,并且分类也像字符串排序一样,其中10毫克在5毫克之前显示是错误的。所需的输出是:
{5 mg,5 mg / 5 ml,5 mg / 5 ml,5 mg / 15 ml,7.5 mg / 5 ml,10 mg,样品,切片}
请帮我解决此问题。
答案 0 :(得分:1)
如果您只想对字符串进行排序,就好像它们没有重音一样,您可以使用以下内容:
Collections.sort(strs, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
o1 = Normalizer.normalize(o1, Normalizer.Form.NFD);
o2 = Normalizer.normalize(o2, Normalizer.Form.NFD);
return o1.compareTo(o2);
}
});
对于更复杂的用例,您需要阅读java.text.Collator
。
这是一个例子:
Collections.sort(strs, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
Collator usCollator = Collator.getInstance(Locale.US);
return usCollator.compare(o1, o2);
}
});
自定义排序:
final String ORDER =“qazwsxedcvfrtgbnhyujmkiolp”;
Arrays.sort(str,new Comparator(){
@Override
public int compare(String o1, String o2) {
return ORDER.indexOf(o1) - ORDER.indexOf(o2) ;
}
});