详细排序方式:中文->数字->英文
整体思路:
1 首先将需要排序的字段进行筛选,开头是中文的放一起,不是中文的放一起;
2 分别对两组数据进行排序;
3 之后将两组数据合并;
下面放代码:
public static void main(String[] args) {
List<String> strings = new ArrayList<>();
String s="012sas阿萨德f";
String a="年后";
String b="asd阿道夫";
String c="阿道夫";
String d="2112gdsa";
String e="zd";
String f="按照";
strings.add(s);
strings.add(a);
strings.add(b);
strings.add(c);
strings.add(d);
strings.add(e);
strings.add(f);
// 将list集合分成只包含以汉字开头元素的集合和不包含以汉字开头元素的集合
List<String> chinese = new ArrayList<>();
List<String> notChinese = new ArrayList<>();
for(String str: strings) {
if(StringUtils.isNotEmpty(str) && String.valueOf(str.charAt(0)).matches("[\u4e00-\u9fa5]")) {
// 如果开头为汉字,则加入汉字列表中
chinese.add(str);
}else {
notChinese.add(str);
}
}
Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA);
// 对两组数据进行排序
notChinese.sort((o1, o2) -> ((Collator) com).compare(o1, o2));
chinese.sort((o1, o2) -> ((Collator) com).compare(PinyinUtil.getPinYin(o1), PinyinUtil.getPinYin(o2)));
//合并数据
chinese.addAll(notChinese);
for (String string : chinese) {
System.out.println(string);
}
}
输出的结果为:
成功!