gpt4 book ai didi

java - 如何按字符串类型的日历对 map 进行排序?

转载 作者:行者123 更新时间:2023-11-30 06:12:28 24 4
gpt4 key购买 nike

我有这样的结构:

Map<String, String> map = new HashMap<String, String>();

数据看起来像这样:

("10/11/2015", "A")
("10/12/2015", "B")
("10/13/2015", "C")
("10/14/2015", "D")
("10/15/2015", "E")

我想按日期(键)对 map 进行排序,所以我尝试将字符串转换为 Calendar 类型,然后将它们移动到 TreeMap 中,如下所示:

DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
Calendar calendar = Calendar.getInstance();

TreeMap<Calendar, String> tree = new TreeMap<Calendar, String>();

for(Map.Entry<String, String> entry : map.entrySet()){
String key = entry.getKey();
String value = entry.getValue();

calendar.setTime(formatter.parse(key));
tree.put(calendar, value);
}

但是当我打印 key 时,结果如下所示:

10/11/2015
10/15/2015
10/14/2015
10/12/2015
10/13/2015

如何正确按日期(字符串类型的日期)对 map 进行排序?

最佳答案

根据您的示例,您应该以 TreeMap 结尾用一个Calendar键,因为您使用的是 Calendar 的同一个实例.

相反,如果您使用了 Calendar 的新实例对于每个条目,例如...

    DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");

Map<String, String> map = new HashMap<>();
map.put("10/11/2015", "A");
map.put("10/12/2015", "B");
map.put("10/13/2015", "C");
map.put("10/14/2015", "D");
map.put("10/15/2015", "E");

TreeMap<Calendar, String> tree = new TreeMap<Calendar, String>();

for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry);
String key = entry.getKey();
String value = entry.getValue();

Calendar calendar = Calendar.getInstance();
calendar.setTime(formatter.parse(key));
tree.put(calendar, value);
}

for (Calendar key : tree.keySet()) {
System.out.println(key.getTime());
}

它会打印出更像...

Sun Oct 11 00:00:00 EST 2015
Mon Oct 12 00:00:00 EST 2015
Tue Oct 13 00:00:00 EST 2015
Wed Oct 14 00:00:00 EST 2015
Thu Oct 15 00:00:00 EST 2015

如果您使用的是 Java 8(+),那么您确实应该使用新的日期/时间 API,例如...

Map<LocalDate, String> tree = new TreeMap<>();

for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry);
String key = entry.getKey();
String value = entry.getValue();

LocalDate ld = LocalDate.parse(key, DateTimeFormatter.ofPattern("MM/dd/yyyy"));
tree.put(ld, value);
}

for (LocalDate key : tree.keySet()) {
System.out.println(key);
}

关于java - 如何按字符串类型的日历对 map 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32857346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com