按对象属性对 TreeMap 进行排序

问题描述 投票:0回答:1

我有一个充满房屋的树形图。每栋房屋都有不同的属性,例如地址、楼层数等。TreeMap 被填充到 JList 中,以便用户可以从列表中选择房屋,然后在其各自的字段中查看每个属性。在列表打开之前,用户可以选择按各种不同的方式排序,例如按字母顺序排列房屋地址,或按最大卧室数量等排序,然后他们将按该顺序查看房屋列表。

我知道 TreeMap 是按键排序的。我正在尝试使用比较器,但我感觉我碰壁了,我不知道我是否正确地执行了此操作。如何从我正在使用的 JFrame/JList 调用我的比较器?

有人可以帮我吗?我的老师已经 4 天没有回复我的电子邮件了,所以我陷入了困境。

public static Map<String, House> neighborhood;

public Neighborhood(){
neighborhood = new TreeMap<>();
}

    public static class SortByAddress implements Comparator<Map.Entry<String, House>>{
        @Override
        public int compare(Entry<String, House> o1, Entry<String, House> o2) {
            // TODO Auto-generated method stub
                return o1.getValue().getAddress().toString().compareTo(o2.getValue().getAddress().toString());
        }
        
    }
java dictionary sorting comparator treemap
1个回答
0
投票

您只关心地图的值,即

House
对象。所以提取。

Collection < House > houses = myMap().values() ;

从该集合中创建一个可排序列表。

List < House > housesSorted = new ArrayList<>( houses );

定义各种比较器。

Comparator < House > compareByBedroomCount = Comparator.comparing( House :: bedroomCount) ;
Comparator < House > compareBySquareMeters = Comparator.comparing( House :: squareMeters) ;

应用适当的比较器。

housesSorted.sort( compareByBedroomCount );
© www.soinside.com 2019 - 2024. All rights reserved.