package com.dchealth.common.util; import com.dchealth.common.utils.StringUtils; import com.dchealth.medical.domain.vo.PatientVo; import java.text.Collator; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Locale; public class SortPersonUtil { public static <T> void sortByName(List<T> personList) { Collator chineseCollator = Collator.getInstance(Locale.CHINA); Collator englishCollator = Collator.getInstance(Locale.US); Collections.sort(personList, new Comparator<T>() { @Override public int compare(T person1, T person2) { if (person1 instanceof PatientVo && person2 instanceof PatientVo) { if (StringUtils.isEmpty(((PatientVo) person1).getPatientName())) { return -1; } if (StringUtils.isEmpty(((PatientVo) person2).getPatientName())) { return -1; } char firstChar1 = ((PatientVo) person1).getPatientName().charAt(0); char firstChar2 = ((PatientVo) person2).getPatientName().charAt(0); boolean isChinese1 = Character.UnicodeScript.of(firstChar1) == Character.UnicodeScript.HAN;//判断是否为中文 boolean isChinese2 = Character.UnicodeScript.of(firstChar2) == Character.UnicodeScript.HAN;//判断是否为中文 if (isChinese1 && isChinese2) { return chineseCollator.compare(((PatientVo) person1).getPatientName(), ((PatientVo) person2).getPatientName()); // 中文姓名按拼音首字母排序 } else if (!isChinese1 && !isChinese2) { return englishCollator.compare(((PatientVo) person1).getPatientName(), ((PatientVo) person2).getPatientName()); // 英文姓名按首字母排序 } else if (isChinese1) { return 1; // 中文姓名排在英文姓名之前 } else { return -1; // 英文姓名排在中文姓名之后 } } return 0; } }); } }
按照姓氏首字母进行排序
于 2024-01-24 16:10:06 首次发布