//把一个集合中的数据进行一个规则进行排序
private static List<Task> pinyinAndHanziSort(List<Task> list) {
if (list == null || list.size() == 0) {
return null;
}
Map<String, Task> map = new HashMap<String, Task>();
String[] names = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
String name = list.get(i).getName();
String alphabet = name.substring(0, 1);
/*判断首字符是否为中文,如果是中文便将首字符拼音的首字母和&符号加在字符串前面*/
if (alphabet.matches("[\\u4e00-\\u9fa5]+")) {
name = getAlphabet(name) + "&" + name;
names[i] = name;
} else {
names[i] = name;
}
//names[i] = pinyinAndHanziSort;
map.put(name, list.get(i));
}
names = sort(names);
list.clear();
for (String name : names) {
if (map.containsKey(name)) {
list.add(map.get(name));
}
}
return list;
}
/**
* 根据数组里面首字母排序
*
* @param data 日期
* @return .
*/
private static String[] sort(String[] data) {
if (data == null || data.length == 0) {
return null;
}
Comparator<Object> comparator = Collator.getInstance(java.util.Locale.CHINA);
Arrays.sort(data, comparator);
return data;
}
/**
* 调用汉子首字母转化为拼音的根据类,,需要在项目中导入pinyin4j.jar包
*
* @param str 汉子首字母
* @return .
*/
private static String getAlphabet(String str) {
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
// 输出拼音全部小写
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
// 不带声调
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
String pinyin = null;
try {
pinyin = PinyinHelper.toHanyuPinyinStringArray(str.charAt(0), defaultFormat)[0];
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
return Objects.requireNonNull(pinyin).substring(0, 1);
}
汉字和字母和数字一起排序
最新推荐文章于 2023-02-27 17:58:05 发布