4

私は大きなリストを持っており、それをツリーマップに入れています。

次に、リストの一番上に「ALL」を置きたいのですが、「ALL」の前に「AAA」があります。

編集:そして私は他のすべての入力をソートしたい

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

arrayListなどを使用することもできますが、この状況を制御する方法があるかどうか疑問に思いました。

4

4 に答える 4

6

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"他のすべてよりも優先されます。

お役に立てれば!

于 2012-06-12T18:31:49.420 に答える
4

TreeMap基本的には使用しないでください。特定の順序で並べ替える場合は、代わりにArrayListまたはを使用してください。キーの順序でエントリを並べ替えます。この場合、それは望ましくありません。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 に答える