1.根据中文首字母排序实现
中文首字母排序首先需要得到中文首字母,然后再进行排序:
/**
* 数字排在最前,英文字母和汉字则按照首字母进行排序
*/
public static List<String> compareTo(List<String> stringList) {
if (CollectionUtils.isEmpty(stringList)) {
return Collections.emptyList();
}
Comparator<String> comparator = (text, texts) -> {
Collator collator = Collator.getInstance(java.util.Locale.CHINESE);
return collator.getCollationKey(getInitials(text)).compareTo(
collator.getCollationKey(getInitials(texts)));
};
Collections.sort(stringList, comparator);
return stringList;
}
/**
* 获取中文首字母
* @param str
* @return
*/
public static String getInitials(String str){
if(StringUtils.isEmpty(str)){
return "#";
}
String letter = PinyinUtil.getFirstLetter(str.substring(0, 1),"");
return letter.toUpperCase();
}
2.也可以根据中文的全拼音进行排序
/**
* 数字排在最前,英文字母和汉字则按照拼音进行排序
*/
public static List<String> compareTo(List<String> stringList) {
if (CollectionUtils.isEmpty(stringList)) {
return Collections.emptyList();
}
Comparator<String> comparator = (text, texts) -> {
Collator collator = Collator.getInstance(java.util.Locale.CHINESE);
return collator.getCollationKey(getInitials(text)).compareTo(
collator.getCollationKey(getInitials(texts)));
};
stringList.sort(stringList, comparator);
return stringList;
}
/**
* 获取中文首字母
* @param str
* @return
*/
public static String getInitials(String str){
if(StringUtils.isEmpty(str)){
return "#";
}
String letter = PinyinUtil.getPinyin(str,"");
return letter.toUpperCase();
}
3.类型
当集合为对象时也是一样的,你想用对象的那个属性拿来排序就取那个就行。 comparator 中的循环换成对对象的属性值.
代码里面的方法可以说是用的最简单的,从给网上借鉴看了不少,有很多废话,写的很垃圾的,很没用的。整理了这个觉得是最实际方便好用的。