需求:对地址簿按照英文字母进行排序(特殊字符以及数字按照“#”分组)

comparator 是javase中的接口,位于java.util包下,大部分人用这个接口主要是用来做排序 。

1.

Comparator<Student> comparator = new Comparator<Student>() {
    @Override
    public int compare(AddressLibrary o1, AddressLibrary o2) {
        Collator collator = Collator.getInstance(java.util.Locale.CHINA);
        return collator.getCollationKey(o1.getSenderName()).compareTo(collator.getCollationKey(o2.getSenderName()));
    }
};
Collections.sort(sendAddessList, comparator);

收件将你查询到的list集合数据放到Collections.sort中,Collections.sort是对集合来进行排序(根据你重写的comparator接口来进行排序)

第一步实现了简单的排序功能。

2.排序完成后 对排序后的数据进行分组 

Map<String, List<Student>> sublibrary = sendAddessList.stream().collect(Collectors.groupingBy(Student-> {
    try {
        String s = PinyinUtils.getAlpha(Student.getSenderName()).toUpperCase();
        String subLibrary = s.substring(0, 1);
        return UPPER_LETTERS.contains(subLibrary) ? subLibrary : "#";
    } catch (Exception e) {
        throw new ServerException("分组失败");
    }
}, Collectors.toList()))

Collectors是jdk1.8出来的 不了解的可以去搜索一下看看 这里不再过说。

Collectors.groupingBy按照括号中自定义的要求来进行分组

return UPPER_LETTERS.contains(subLibrary) ? subLibrary : "#"

“UPPER_LETTERS”是我自定义的一个常量字符串(大写A-Z)

截取你要按照哪一个字段来分组,截取第一个首字母并转换为大写 

并判断 如果首字符不存在你自定义的常量字符串中 就分组到“#” 反之则按照A-Z分组

PinyinUtils.getAlpha 将中文转换为拼音 (PinyinUtils都是关于汉字转拼音的工具类)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值