stream流,排序集合的内容,先根据26字母排序然后根据id排序,如城市+id
倒序可在sorted后加reversed()方法
话不多说上代码
/**
* 先根据name的26英文字母排序,其次根据id排序
* 注意toString()方法会引发空指针问题,可使用工具类判断(如果为空的情况下转为空字符串)
* 默认升序
* 倒序sorted后加reversed()
*/
//源集合(可用于接收数据库查询出来的数据)
List<Map<String,Object>> list = new ArrayList<>();
HashMap<String,Object> hashMap = new HashMap<>();
hashMap.put("id", 1);
hashMap.put("name", "zhang3");
HashMap<String,Object> hashMap1 = new HashMap<>();
hashMap1.put("id", 2);
hashMap1.put("name", "li4");
HashMap<String,Object> hashMap2 = new HashMap<>();
hashMap2.put("id", 3);
hashMap2.put("name", "li5");
list.add(hashMap1);
list.add(hashMap2);
list.add(hashMap);
List<Map<String,Object>> newList = new ArrayList<>();
Comparator comparator = Collator.getInstance(java.util.Locale.CHINA);
Map<String, List<Map<String, Object>>> name = list.stream().collect(Collectors.groupingBy(map -> map.get("name").toString()));
Set<String> objects = name.keySet();
String[] objects1 = objects.toArray(new String[objects.size()]);
Arrays.sort(objects1, comparator);
for (String s : objects1) {
newList.addAll(name.get(s).stream().sorted(Comparator.comparing(m -> m.get("id").toString())).collect(Collectors.toList()));
}
System.out.println(newList);
测试结果: