使用Map.Entry值对集合进行排序

时间:2016-06-02 06:38:46

标签: java sorting set

我有一个Set如下:

Set<Map.Entry<String,String>> set = new HashSet<>();

如何根据Set的密钥对此Map.Entry进行排序。

感谢。

2 个答案:

答案 0 :(得分:3)

Tim建议,为此目的使用TreeSet。但是,您可以使用Comparator类中已定义的TreeSet实例化Comparator,而不是定义自己的Map.Entry实现。

Set<Map.Entry<String, String>> set = new TreeSet<>(Map.Entry.comparingByKey());

现在应该会给你一个很好的订单Set

答案 1 :(得分:2)

您无法对常规Java Set进行排序,因为它没有排序。如果您想要一个有序集,一个选项是使用TreeSet。您可以使用自定义比较器创建TreeSet,然后将HashSet添加到其中:

TreeSet<Map.Entry<String,String>> ts
    = new TreeSet<Map.Entry<String,String>>(new Comparator<Map.Entry<String,String>>() {
    @Override
    public int compare(Map.Entry<String,String> entry1, Map.Entry<String,String> entry2) {
        return entry1.getKey().compareTo(entry2.getKey());
    }
});

ts.addAll(set);

如果您现在遍历该集合,您会发现它们按Map.Entry元素的键排序:

for (Map.Entry<String, String> entry : ts) {
    System.out.println(entry.getKey());
}