Android ListView 按字母排序要求每个拼音内部子类按字母在上,汉字在下再排序

最近碰到个需求,要求对已经按字母排完序的ListView,再按照汉字字母进行二级排序,下面是一种思路,

jmd_sbook = new ArrayList<>();
jmd_sbook_m = new ArrayList<>();
jmd_sbook_l = new ArrayList<>();
jmd_sbook_n = new ArrayList<>();

//遍历数据源,拿到关键字的第一位判定是字母数字还是汉字
for (int i = 0; i < datas.size(); i++) {
    boolean isSpecial = false;
    String name = datas.get(i).getItemTitle().toString();
    String text = name.substring(0, 1);
    Pattern p = Pattern.compile("[a-zA-Z]");
    Matcher m = p.matcher(text);
    if (m.matches()) {
        isSpecial = true;
        jmd_sbook_l.add(datas.get(i));
    }
    p = Pattern.compile("[\u4e00-\u9fa5]");
    m = p.matcher(text);
    if (m.matches()) {
        isSpecial = true;
        jmd_sbook_m.add(datas.get(i));
    }
    if (!isSpecial) {
        jmd_sbook_n.add(datas.get(i));
    }

}
//这里是投机取巧的方法,要求汉字必须在字母的上面,所以要先合并都为汉字的那一组
jmd_sbook.addAll(jmd_sbook_l);
jmd_sbook.addAll(jmd_sbook_m);
jmd_sbook.addAll(jmd_sbook_n);
//拿到完整的数组以后,我们下面要进行字母排序,排序的方法网上都有,大家可以搜一搜
Collections.sort(jmd_sbook, new PinyinComparator());

mAdapter.setDatas(jmd_sbook);
mListView.setAdapter(mAdapter);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值