4

我有一个大列表并将其放入树形图中。

然后我想把“ALL”放在列表的最顶端,但是在“ALL”之前有“AAA”的东西

编辑:我希望对所有其他输入进行排序

List     ->    List
-----          -----
AAA            AAA
BBB            ALL
CCC            BBB
               CCC

我可以使用 arrayList 或其他东西,但我想知道是否有办法控制这种情况。

4

4 回答 4

6

一种选择是构建一个自定义比较器,该比较器始终将“ALL”一词排在其他所有内容之前:

TreeMap<String, T> myMap = new TreeMap<String, T>(new Comparator<String>() {
    public int compare(String lhs, String rhs) {
        /* See which of the inputs, if any, are ALL. */
        bool oneAll = lhs.equals("ALL");
        bool twoAll = rhs.equals("ALL");

        /* If both are ALL or neither are ALL, just do a normal comparison. */
        if (oneAll == twoAll) {
            return lhs.compareTo(rhs);
        }
        /* Otherwise, exactly one of them is ALL.  Determine which one it is and
         * react accordingly.
         */
        else if (oneAll) {
            return -1;
        } else {
            return +1;
        }
    }
});

这将按升序对所有内容进行排序,但优先"ALL"于其他所有内容。

希望这可以帮助!

于 2012-06-12T18:31:49.420 回答
4

基本不用TreeMap。如果您想按特定顺序放置事物,只需使用 anArrayList或 a即可LinkedListTreeMap按其键的顺序对其条目进行排序。在这种情况下,您不希望这样。

编辑:如果您只是关心将 ALL 放在顶部,那么自定义比较器就可以了。但是,如果您真的希望能够以一种不容易仅由所涉及的键确定的方式指定每个条目的位置,那么我支持我的建议,这TreeMap不是前进的方向。

于 2012-06-12T18:30:38.737 回答
1

你可以自己写 compareTo() ,这样 ALL 总是最重要的

于 2012-06-12T18:33:26.503 回答
1

使用 LinkedHashMap 可以让您保持与添加到地图的元素相同的顺序。如果您需要自定义订单,您可以将自己的比较器与 TreeMap 一起使用。

于 2012-06-12T18:33:28.013 回答