我的Object[]
类型列表是TreeMap.Entry<String, ChatDisplayDayWrapper>
。
密钥是2017-11-28
,2017-11-27
,2017-11-26
等字符串。
如何对列表进行排序以使键也按顺序排序
- &GT; 2017-11-26
,2017-11-27
,2017-11-28
?
我尝试将String
转换为Date
put我不知道如何在对列表进行排序后将其写回来。
代码
Object[] objectList = chatWrapper.getChatDayWrappers();
List<Date> listToSort = new ArrayList<Date>();
for (int i = 0; i <= objectList.size() - 1; i++) {
String day = objectList[i].key;
Date newDate = dfDate.parse(day);
listToSort.add(newDate)
}
getLogger().info("before sorting listToSort: " + listToSort);
listToSort = listToSort.sort { a, b ->
a <=> b
}
getLogger().info("After sorting listToSort: " + listToSort);
输出
排序listToSort前的:
[星期二11月28日00:00:00 2017年1月27日星期一00:00:00 00:00,星期日11月26日00:00:00 CET 2017]
排序listToSort之后:
[太阳11月26日00:00:00 CET 2017年11月27日星期一00:00:00截止2017年11月28日星期二00 00:00:00]
截图
答案 0 :(得分:1)
Java 8
List<TreeMap.Entry<String, ChatDisplayDayWrapper>> myList = Arrats.asList(objectList);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
Collections.sort(myList , (s1, s2) -> LocalDateTime.parse(s1.getKey(), formatter).
compareTo(LocalDateTime.parse(s2.getKey(), formatter)));
Java 7
List<TreeMap.Entry<String, ChatDisplayDayWrapper>> myList = Arrays.asList(objectList);
static SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
public static Comparator<TreeMap.Entry<String, ChatDisplayDayWrapper>> myComparator = new Comparator<TreeMap.Entry<String, ChatDisplayDayWrapper>>() {
@Override
public int compare(TreeMap.Entry<String, TreeMap.Entry<String, ChatDisplayDayWrapper>>e1, Employee e2) {
return formatter .parse(s1.getKey()).
compareTo(formatter .parse(s2.getKey()))
}
};
Collections.sort(myList , myComparator);
我几乎从here
取了它答案 1 :(得分:0)
使用如下... 反向排序
Comparator<Date> dateComparator = (a, b)-> a.compareTo(b);
listToSort.sort(dateComparator.reversed());
用于自然分类
Comparator<Date> dateComparator = (a, b)->a.compareTo(b);
listToSort .sort(dateComparator);