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都是关于汉字转拼音的工具类)