说明:针对 List<Map<排序基准date, 对象>>这样的list进行排序: 放到List中的Map是固定格式的,key为日期(可以排序的key,可以是数字或其他字符串),然后需要将List按照Map的key进行排序。
pom用到了:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.2</version>
</dependency>
准备一个测试对象
import lombok.Data;
/**
* @author wangdy
* @date 2021-07-15 13:20
*/
@Data
public class TestVo {
/**
* Title
*/
private String title;
/**
* 日期字符串
*/
private String date;
}
排序类实现Comparator接口
import java.util.Comparator;
import java.util.Map;
/**
* @desc: List<Map> 排序
* @date: 2021-07-15 13:29
*/
public class MapComparator implements Comparator<Map<String, Object>> {
@Override
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
// 取出map的key,进行比较排序
String b1 = o1.get("date").toString();
String b2 = o2.get("date").toString();
if (b2 != null) {
// 倒序,正序倒过来即可。
return b2.compareTo(b1);
}
return 0;
}
}
最终测试类:
package com.wdy.shardingjdbc.test;
import cn.hutool.json.JSONUtil;
import com.alibaba.druid.support.json.JSONUtils;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author wangdy
* @date 2021-07-15 13:16
*/
public class MapListSort {
public static void main(String[] args) {
// 准备数据
List<TestVo> list = Lists.newArrayList();
for (int i = 1; i <= 5; i++) {
TestVo testVo = new TestVo();
testVo.setTitle("这是第" + i + "个");
testVo.setDate(LocalDate.now().minusDays(i).toString());
list.add(testVo);
}
Map<String, List<TestVo>> dateListMap = list.stream().collect(Collectors.groupingBy(TestVo::getDate));
Set<String> keySet = dateListMap.keySet();
// List<Map<String, Object>> : List<Map<dateStr, 对象>>
List<Map<String, Object>> outList = Lists.newArrayList();
for (String date : keySet) {
Map<String, Object> innerMap = Maps.newHashMap();
innerMap.put("date", date);
innerMap.put("testVos", dateListMap.get(date));
outList.add(innerMap);
}
System.out.println("Before sort.!!!!" + JSONUtil.toJsonStr(outList));
// 实际排序
outList.sort(new MapComparator());
// Collections.sort(outList, new MapComparator());
System.out.println("After sort.!!!!" + JSONUtil.toJsonStr(outList));
}
}
输出:
Before sort.!!!:
[
{
"date": "2021-07-10",
"testVos": [
{
"date": "2021-07-10",
"title": "这是第5个"
}
]
},
{
"date": "2021-07-12",
"testVos": [
{
"date": "2021-07-12",
"title": "这是第3个"
}
]
},
{
"date": "2021-07-11",
"testVos": [
{
"date": "2021-07-11",
"title": "这是第4个"
}
]
},
{
"date": "2021-07-14",
"testVos": [
{
"date": "2021-07-14",
"title": "这是第1个"
}
]
},
{
"date": "2021-07-13",
"testVos": [
{
"date": "2021-07-13",
"title": "这是第2个"
}
]
}
]
After sort.!!!:
[
{
"date": "2021-07-14",
"testVos": [
{
"date": "2021-07-14",
"title": "这是第1个"
}
]
},
{
"date": "2021-07-13",
"testVos": [
{
"date": "2021-07-13",
"title": "这是第2个"
}
]
},
{
"date": "2021-07-12",
"testVos": [
{
"date": "2021-07-12",
"title": "这是第3个"
}
]
},
{
"date": "2021-07-11",
"testVos": [
{
"date": "2021-07-11",
"title": "这是第4个"
}
]
},
{
"date": "2021-07-10",
"testVos": [
{
"date": "2021-07-10",
"title": "这是第5个"
}
]
}
]