按对象的属性对Map进行排序

时间:2018-05-21 16:46:42

标签: java sorting object hashmap

免责声明:我已经发布了这样一个问题,并且标记为重复。请尝试帮助我。我已经完成了stackoverflow上所有以前的方法,没有任何帮助。所有提到的对Map(Key,Values)进行排序的方法在我的情况下都不起作用,因为我还有一步,即检索值的属性。这一次,我试着详细介绍。

我在Java中有一个Map(String,Object),我想使用Object的一个属性对它进行排序。

e.g。假设我有一个班级

clientHeight

现在,我创建了一张地图

class Entry
{
    int id;
    String name;
    String address;
    //Rest of the code
}

我想按类Entry(Entry.id)

的属性id对地图进行排序

请帮忙!

例如,我有三个Entry类的对象

 Map<String,Entry>

现在,我的地图最初如下:

entry1 :
        id=1
        name="abc"
        address="india"
entry2 :
        id=2
        name="xyz"
        address="india"
entry3 :
        id=3
        name="pqr"
        address="india"

排序后,它应该像

Key :   Value
first:  entry2
second: entry3
third : entry1

3 个答案:

答案 0 :(得分:1)

您可以使用流API轻松完成任务:

Map<String, Entry> resultSet = myMap.entrySet()
                .stream()
                .sorted(Comparator.comparingInt(e -> e.getValue().getId()))
                .collect(Collectors.toMap(Map.Entry::getKey,
                        Map.Entry::getValue,
                        (left, right) -> left,
                        LinkedHashMap::new));

答案 1 :(得分:1)

您的要求通常是数据结构使用不良的症状。

如果您希望按关键对象的属性对地图进行排序,您只需编写自定义比较器,但由于您希望按值排序,因此它会更复杂。

尝试理解这个问题的答案:Sort a Map<Key, Value> by values。然后尝试组合使用自定义比较器。

答案 2 :(得分:-3)

您无法对地图进行排序。

您可以拥有一个可以对其条目进行排序的地图,也可以对List<Map.Entry>进行排序。

试试这个:

Map<String, Entry> map; // your map
Map<String, Entry> sorted = new TreeMap<>(Comparator.comparing(s -> map.get(s).getId());
sorted.putAll(map);