1.前台需要List<HashMap<String,Object>>类型的数据,先对查询出的List<UserVo>进行处理。
后台查询已经将姓名首字母查询出来(数据库中设计汉字转字母函数,详情查看https://blog.csdn.net/dong__CSDN/article/details/102706986)
HashMap<String,List<UserVO>> userMap = new HashMap<>();
// 获取用户信息
List<UserVO> lists = this.userService.searchZFRYForFristLetter(param);
// 遍历lists,按照首字母封装到userMap
for (UserVO userVO:lists) {
if(!StringUtils.isEmpty(userVO.getFristLetter())){
// map中的key是否包含该首字母,若存在则直接添加;否则新建key再添加进去
if(userMap.containsKey(userVO.getFristLetter())){
userMap.get(userVO.getFristLetter()).add(userVO);
}else{
List<UserVO> list = new ArrayList<>();
list.add(userVO);
userMap.put(userVO.getFristLetter(),list);
}
}
}
现在userMap中key是首字母,value是首字母为该key的list
2.遍历userMap,将首字母和用户信息封装到,类型为List<HashMap<String,Object>>的userList中
// 遍历userMap,将首字母和用户信息封装到userList
for (Map.Entry<String, List<UserVO>> entry : userMap.entrySet()) {
HashMap<String,Object> map = new HashMap<>();
map.put("fristLetter",entry.getKey().toUpperCase());
map.put("userInfo",entry.getValue());
userList.add(map);
}
3.对userList进行排序
// 对List<HashMap<String,Object>>类型的userList按照首字母排序
Collections.sort(userList, new Comparator<Map<String, Object>>() {
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
String name1 = o1.get("fristLetter").toString();
String name2 = o2.get("fristLetter").toString();
return name1.compareTo(name2);
}
});