【问题标题】:Java Put in specific order to treemapJava 按特定顺序放入树形图
【发布时间】:2012-06-15 16:28:34
【问题描述】:

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

然后我想把“ALL”放在列表的最顶部,但是在“ALL”之前有一个“AAA”

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

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

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

【问题讨论】:

  • 所以无论您添加什么,您都希望 ALL 保持领先?
  • 您希望对其余的(除 key='ALL' 以外的条目)进行排序吗?

标签: java string collections treemap


【解决方案1】:

一种选择是构建一个自定义比较器,始终将“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" 优先于其他所有内容。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    基本上不要使用TreeMap。如果您想按特定顺序排列,只需使用 ArrayListLinkedList 代替。 TreeMap 按其键的顺序对其条目进行排序。在这种情况下你不希望这样。

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

    【讨论】:

    • 我认为 OP 希望对所有内容进行排序,但 "ALL" 始终排在首位。如果是这样的话,这个解决方案可能并不理想。
    • 完全不同意。如果我们不能控制插入的顺序,TreeMap 是理想的。这就是为什么有一个 Comparator 接口。
    • @JudgeMental:这取决于订单是由于密钥本身还是由于某些外部选项。如果它只是“ALL”的情况出现在一切之前,那么可以使用Comparator 来完成。如果您需要密钥中的数据以外的数据,那么它并不合适。
    【解决方案3】:

    您可以编写自己的 compareTo() 以便 ALL 始终排在首位

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-05
        • 1970-01-01
        • 2019-07-18
        • 2011-06-22
        相关资源
        最近更新 更多