首页 > 解决方案 > 按对象的属性对地图进行排序

问题描述

免责声明:我已经发布过这样一个问题,它被标记为重复。请尝试帮助我。我已经浏览了 stackoverflow 上所有以前的方法,但没有任何帮助。所有提到的排序 Map(Key,Values) 的方法在我的情况下都不起作用,因为我还有一步,即检索值的属性。这一次,我尝试了完整的细节。

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

例如,假设我有一堂课

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

现在,我创建了一张地图

 Map<String,Entry>

我想按类条目的属性 id (Entry.id) 对地图进行排序

请帮忙 !

例如,我有三个 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

排序后应该是这样的

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

标签: javasortingobjecthashmap

解决方案


您可以使用流 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));

推荐阅读