如何对 Map<LocalDate, Integer> 进行排序? [复制]

Posted

技术标签:

【中文标题】如何对 Map<LocalDate, Integer> 进行排序? [复制]【英文标题】:How can I sort a Map<LocalDate, Integer>? [duplicate] 【发布时间】:2021-02-07 20:34:41 【问题描述】:

我只想知道如何按时间顺序对 Map 进行排序。

这是我的代码的第一行:

Map<LocalDate, Integer> commitsPerDate = new HashMap<>();

然后,我用任何值(但不按时间顺序)填写我的地图。 当我显示我的地图的值时,它会按以下顺序显示:

for(var item : commitsPerDate.entrySet()) 
     System.out.println(item.getKey() + " = " + item.getValue());

2020-08-31 = 1
2020-09-30 = 3
2020-09-29 = 1
2020-09-28 = 5
2020-09-27 = 5
2020-08-27 = 4
2020-09-25 = 3
2020-10-21 = 1
2020-10-18 = 1
2020-10-17 = 5
2020-10-16 = 4
2020-10-15 = 5
2020-10-14 = 6
2020-09-14 = 1
2020-10-13 = 2
2020-09-13 = 2

我希望它按时间顺序排序,以便显示顺序相同。

谢谢。

【问题讨论】:

如果你想通过 key 对元素进行映射,那么你可以使用 TreeMap 而不是 HashMap。 【参考方案1】:

作为Pshemo has already mentioned,如果您希望地图按键对元素进行排序,那么您可以使用TreeMap 而不是HashMap

演示:

import java.time.LocalDate;
import java.util.Map;
import java.util.TreeMap;

public class Main 
    public static void main(String[] args) 
        Map<LocalDate, Integer> commitsPerDate = new TreeMap<>();
        commitsPerDate.put(LocalDate.parse("2020-08-31"), 1);
        commitsPerDate.put(LocalDate.parse("2020-09-30"), 3);
        commitsPerDate.put(LocalDate.parse("2020-09-29"), 1);
        commitsPerDate.put(LocalDate.parse("2020-09-28"), 5);

        System.out.println(commitsPerDate);
    

输出:

2020-08-31=1, 2020-09-28=5, 2020-09-29=1, 2020-09-30=3

相反的顺序:

import java.time.LocalDate;
import java.util.Collections;
import java.util.Map;
import java.util.TreeMap;

public class Main 
    public static void main(String[] args) 
        Map<LocalDate, Integer> commitsPerDate = new TreeMap<>(Collections.reverseOrder());
        commitsPerDate.put(LocalDate.parse("2020-08-31"), 1);
        commitsPerDate.put(LocalDate.parse("2020-09-30"), 3);
        commitsPerDate.put(LocalDate.parse("2020-09-29"), 1);
        commitsPerDate.put(LocalDate.parse("2020-09-28"), 5);

        System.out.println(commitsPerDate);
    

输出:

2020-09-30=3, 2020-09-29=1, 2020-09-28=5, 2020-08-31=1

出于任何原因,如果您必须使用HashMap,请查看How to sort Map values by key in Java?

【讨论】:

以上是关于如何对 Map<LocalDate, Integer> 进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何计算 Map<> 中每个列表的总和?

尝试对 std::map<int, class> 进行排序时出错

如何根据其值的属性对地图进行排序?

如何使用单个 for 循环遍历 std::map<string,int> 和 std::vector<int>?

C++容器map的key相同,如何合并对应的values

如何将 array<map<string,int>> 插入配置单元表?