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

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

1.

Comparator comparator = new Comparator() {
    @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> 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都是关于汉字转拼音的工具类)

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