List<Map<String, Object>> textList = new LinkedList();
Map<String, Object> map = new LinkedHashMap<>();
map.put("replytime","2023-07-31 13:00:00");
map.put("name","下午一点");
Map<String, Object> map1 = new LinkedHashMap<>();
map1.put("replytime","2023-07-31 14:00:00");
map1.put("name","下午二点");
Map<String, Object> map2 = new LinkedHashMap<>();
map2.put("replytime","2023-07-31 15:00:00");
map1.put("name","下午三点");
textList.add(map);
textList.add(map1);
textList.add(map2);
System.out.println("初始数组:"+textList);
在不建立Bean类的情况下,根据时间字符串 对textList排序?
我要用groovy写
网上列举了用 Collections.sort(list); 但是我里面的map不是个对象,怎么处理?
1、新建一个list,然后把你的textList 里面所有map的replytime值存到这个list里面
2、把这个list排序
3、新建一个结果List<Map<String, Object>> resTextList,
4、遍历list,每个值比如是replytime1,在这个循环里面,遍历textList ,取每个map,判断当前map里面的replytime是否等于replytime1,等于则添加到resTextList
5、让textList =resTextList,就能排序了
List<Map<String, Object>> textList = new LinkedList();
Map<String, Object> map = new LinkedHashMap<>();
map.put("replytime", "2023-07-31 14:00:00");
map.put("name", "下午一点");
Map<String, Object> map1 = new LinkedHashMap<>();
map1.put("replytime", "2023-07-31 13:00:00");
map1.put("name", "下午二点");
Map<String, Object> map2 = new LinkedHashMap<>();
map2.put("replytime", "2023-07-31 15:00:00");
map1.put("name", "下午三点");
textList.add(map);
textList.add(map1);
textList.add(map2);
System.out.println("初始数组:" + textList);
List<String> list = new LinkedList<>();
for (Map<String, Object> stringObjectMap : textList) {
list.add(stringObjectMap.get("replytime").toString());
}
System.out.println("中间数组:" + list);
Collections.sort(list);
List<Map<String, Object>> resTextList = new LinkedList();
for (String s : list) {
for (Map<String, Object> stringObjectMap : textList) {
if (stringObjectMap.get("replytime").equals(s)) {
resTextList.add(stringObjectMap);
}
}
}
textList = resTextList;
System.out.println("转换数组:" + textList);
可以用jdk8的stream流来操作。具体如下:
代码案例:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
public class Test {
private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//主函数直接输出
public static void main(String[] args) {
List<Map<String, Object>> textList = new ArrayList<>();// Your list of maps here
Map<String, Object> map0 = new LinkedHashMap<>();
map0.put("replytime", "2023-07-31 13:00:00");
map0.put("name", "下午一点");
Map<String, Object> map1 = new LinkedHashMap<>();
map1.put("replytime", "2023-07-31 12:00:00");
map1.put("name", "下午十二点");
Map<String, Object> map2 = new LinkedHashMap<>();
map2.put("replytime", "2023-07-31 15:00:00");
map2.put("name", "下午三点");
textList.add(map0);
textList.add(map1);
textList.add(map2);
List<Map<String, Object>> sortedList = textList.stream()
.sorted(Comparator.comparing(map -> {
try {
return dateFormat.parse((String) map.get("replytime"));
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}))
.collect(Collectors.toList());
sortedList.forEach(System.out::println);
}
}
List<Map<String, Object>> textList = new LinkedList()
Map<String, Object> map = new LinkedHashMap<String, Object>()
map.put("replytime", "2023-07-31 13:00:00")
map.put("name", "下午一点")
Map<String, Object> map1 = new LinkedHashMap<String, Object>()
map1.put("replytime", "2023-07-31 14:00:00")
map1.put("name", "下午二点")
Map<String, Object> map2 = new LinkedHashMap<String, Object>()
map2.put("replytime", "2023-07-31 15:00:00")
map2.put("name", "下午三点")
textList.add(map)
textList.add(map1)
textList.add(map2)
println "初始数组:" + textList
textList.sort { a, b ->
Date.parse("yyyy-MM-dd HH:mm:ss", a.replytime) <=> Date.parse("yyyy-MM-dd HH:mm:ss", b.replytime)
}
println "排序后的数组:" + textList
map不是对象?不是new操作的吗?
【以下回答由 GPT 生成】
这个问题可以使用Groovy的sortBy
方法来解决,sortBy
方法可以指定一个闭包作为排序的依据。根据时间字符串进行排序需要对时间字符串进行解析,并将其转换为对应的Date
类型。以下是一个可行的解决方案:
// 导入相关类
import java.text.SimpleDateFormat
import java.util.Date
// 日期格式化器,用于解析时间字符串
def dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
// 使用sortBy方法对textList进行排序
textList.sortBy { map ->
// 获取replytime对应的时间字符串
def timeStr = map["replytime"]
// 将时间字符串解析为Date类型
def date = dateFormat.parse(timeStr)
// 返回Date对象作为排序的依据
date
}
// 输出排序后的结果
println "排序后的数组:$textList"
这段代码首先导入了SimpleDateFormat
和Date
类,并创建了一个日期格式化器对象dateFormat
,用于解析时间字符串。然后使用sortBy
方法对textList
进行排序,排序依据是每个map中replytime
对应的时间字符串转换后的Date
对象。最后输出排序后的结果。
运行以上代码,可以得到如下输出结果:
排序后的数组:[[replytime:2023-07-31 13:00:00, name:下午一点], [replytime:2023-07-31 14:00:00, name:下午二点], [replytime:2023-07-31 15:00:00, name:下午三点]]
注意:在进行时间字符串的解析和格式化时,需要处理可能会出现的异常,例如ParseException
。此外,上述代码使用了默认的时区和Locale,如果需要指定时区,请在创建SimpleDateFormat
对象时进行设置。