一、實現思路:
1、將數據list 進行排序Collections,排序后是按照漢字字母排序的
2、循環找出26個字母,以字母為key,以list中相同首字母的數據為值(集合)
二、代碼實現:
// 這里需要用到 pinyin4j-2.5.0.jar 這個漢字轉拼音的jar包
/**
* 獲取漢字串拼音,英文字符不變
*/
public static String getFullSpell(String chinese) {
StringBuffer pybf = new StringBuffer();
char[] arr = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < arr.length; i++) {
if (arr[i] > 128) {
try {
pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat)[0]);
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pybf.append(arr[i]);
}
}
return pybf.toString();
}
/**
* 將集合數據按照漢字首字母分組排序
*/
public static Map<String, Object> screenManufacturer(List<String> list) {
try {
Collator com = Collator.getInstance(java.util.Locale.CHINA);
// 按字母排序
Collections.sort(list, com);
// 輸出26個字母
Map<String, Object> map = new TreeMap<>();
for (int i = 1; i < 27; i++) {
String word = String.valueOf((char)(96 + i)).toUpperCase();
// 循環找出 首字母一樣的數據
List<String> letter = new ArrayList<>();
for (String str : list) {
String pybf = getFullSpell(str);
String zm = pybf.substring(0, 1);
if (word.equals(zm)) {
letter.add(str);
}
}
map.put(word, letter);
}
return map;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
樣例:
{
"A": ["阿拉伯"],
"B": [],
"C": [],
"D": [],
"E": [],
"F": [],
"G": [],
"H": [],
"I": [],
"J": [],
"K": [],
"L": ["李四", "李五"],
"M": [],
"N": [],
"O": [],
"P": [],
"Q": [],
"R": [],
"S": [],
"T": [],
"U": [],
"V": [],
"W": [],
"X": [],
"Y": [],
"Z": ["張三"]
}