使用Class作为值对TreeMap进行排序

时间:2015-02-18 05:48:50

标签: java sorting treemap

我有一个带有String键的TreeMap和一个Class的实例作为值。我希望能够对类的对象进行排序。我已经走到了这一步:

public class StockTakeCompare  {

    public static TreeMap<String, StockItem> sortByValues(final Map<String, StockItem> treeMap) {
        Comparator<StockItem> valueComparator =
                new Comparator<StockItem>() {
                    public int compare(StockItem o1, StockItem o2) {

                        int res = o1.Name.compareTo(o2.Name);
                        return res != 0 ? res : 1; // to preserve items with equal values
                    }
                };

        //THIS LINE THROWS AN ERROR:
        TreeMap<String, StockItem> sortedByValues = new TreeMap<String, StockItem>(valueComparator);
        sortedByValues.putAll(treeMap);
        return sortedByValues;
    }
}

该行:

TreeMap<String, StockItem> sortedByValues = new TreeMap<String, StockItem>(valueComparator);

给出了这个错误:

  

错误:找不到适合TreeMap(Comparator)的构造函数。

这是有道理的,但还有另一种方法可以实现我的目标吗?


这不是重复的。我的问题是关于在TreeMap中使用类作为值并对这些类的对象进行排序。 &#34;重复&#34;仅将原始作为值处理


1 个答案:

答案 0 :(得分:1)

采用比较器的TreeMap构造函数为TreeMap(Comparator<? super K> comparator)

换句话说,TreeMap只会根据键进行排序,而不是根据您的示例尝试的值进行排序。

修改:更完整的答案 - Java TreeMap Comparator