我有一个充满房屋的树形图。每栋房屋都有不同的属性,例如地址、楼层数等。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());
}
}
您只关心地图的值,即
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 );