【问题标题】:Sorting collection in java在java中对集合进行排序
【发布时间】:2015-09-24 04:22:02
【问题描述】:

我有一个HashMap,它在Strings 中具有Date 的键和自定义对象的ArrayList 的值。我想根据 key 对这个 hashmap 进行排序。我该怎么做?

HashMap<String,List<ClassName>> hashmap = new HashMap<String,List<ClassName>>();

Hashmap是这样的时候:

{"2015/07/15 : List("Object1","object2","object3")
"2015/07/14 :List("Object4" , "Object5")}

请提出建议。

【问题讨论】:

标签: java sorting hashmap


【解决方案1】:

您可以使用 TreeMap 代替 HashMapTreeMap 实现了 Sorted Map 接口。

【讨论】:

  • 不使用树形图可以吗?
【解决方案2】:

除了使用排序映射(如其他人建议的那样)外,您还可以在使用键时轻松对键进行排序,而不是在插入时排序。

例如,在 Java 8 中:

treeMap.keySet().stream().sorted().forEach(System.out:println);

这样做的好处是使用不同的比较器很容易进行排序,而无需更改集合。

例如,如果您想按列表值中的项目数进行排序:

treeMap.keySet().stream().sorted(Comparator.comparingInt(k -> treeMap.get().size()))

此方法适用于您经常在映射中插入和更改值,然后偶尔需要为特定操作排序的键的情况。您可以获得HashMap 的性能,但可以灵活地根据需要进行排序。

【讨论】:

    【解决方案3】:

    如果需要排序地图,可以使用 TreeMap。

    如果你不想使用TreeMap,那么获取key并如下排序。

    HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
        map.put("2015/07/15", list);
        map.put("2015/07/17", list1);
        map.put("2015/07/16", list1);
    
        ArrayList<String> keyset = new ArrayList<String>(map.keySet());
        Collections.sort(keyset);
    

    【讨论】:

    • 感谢您的回复。如果我按照建议排序为 Collections.sort(keyset) 。地图会排序吗?
    【解决方案4】:

    首先,您可以在需要排序地图时使用TreeMap。但是,您将日期值存储为字符串。然后比较每一个变得更加困难。所以我建议使用java.util.Date 而不是String。添加到地图时,您可以使用日期格式化程序。使用以下代码。

    TreeMap<Date, List> treeMap = new TreeMap<>();
    

    您可以在TreeMap 的构造函数中指定Comparator。所以很容易根据您的自定义顺序对事物进行分类。

    【讨论】:

      最近更新 更多