java按值排序树形图
我想按特定的客户属性对客户对象的树状图进行排序。 树状图的定义如下:
private TreeMap<Long,Customer> customerMap = new TreeMap<>();
Long是存储的客户ID的类型
我编写了一个函数来创建一个新的树映射,并将一个比较器传递给它的构造函数,该构造函数获取映射项及其值,用于比较特定字段
public Customer[] getCustomersByName() {
TreeMap<Long,Customer> sortByName = new TreeMap<> (
new Comparator<Map.Entry<Long,Customer>>() {
@Override public int compare(Map.Entry<Long,Customer> cus1, Map.Entry<Long,Customer> cus2) {
return cus1.getValue().getLastName().compareTo(cus2.getValue().getLastName());
}
}
);
sortByName.putAll(customerMap);
// sortByName to Customer[] and return.
}
这不起作用并抛出:无法推断TreeMap的类型参数<>;2号线的爪哇(16778094)
也许,问题在于,比较器需要<;地图进入<;K、 V>>;比较树形图<;K、 V>;这就是问题所在
我该如何解决这个问题,以按值排序,但保持customerMap类型不变
我知道树形图只按键排序。这项工作是否有更好的数据结构,这样我就可以存储一堆客户对象,并按不同的客户属性对它们进行排序,而不需要太昂贵的操作(最好不是多项式)
# 1 楼答案
这对于流来说相当容易:
您只需要根据您的示例对值进行排序,那么为什么要麻烦将
TreeMap
反向排序,而您唯一关心的是已排序(按名称)Customer[]
# 2 楼答案
设置第二个树状图,使用客户的姓氏作为键: