按照姓氏首字母进行排序

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;
            }
        });


    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值