23

TreeMapカスタムソート順で Javaを作成したいと考えています。文字列であるソートされたキーは、2 番目の文字に従ってソートする必要があります。値も文字列です。

サンプル マップ:

Za,FOO
Ab,Bar
4

2 に答える 2

35

次のようなカスタム コンパレータを使用できます。

    Comparator<String> secondCharComparator = new Comparator<String>() {
        @Override public int compare(String s1, String s2) {
            return s1.substring(1, 2).compareTo(s2.substring(1, 2));
        }           
    };

サンプル:

    SortedMap<String,String> map =
        new TreeMap<String,String>(secondCharComparator);
    map.put("Za", "FOO");
    map.put("Ab", "BAR");
    map.put("00", "ZERO");
    System.out.println(map); // prints "{00=ZERO, Za=FOO, Ab=BAR}"

これは、インデックス 1 に文字があると単純に仮定していることに注意してください。そうでない場合はStringスローします。StringIndexOutOfBoundsException


または、次の比較を使用することもできます。

return s1.charAt(1) - s2.charAt(1);

この引き算の「トリック」は一般的に破られていますが、2 の引き算は をcharオーバーフローしないため、ここでは問題なく機能しintます。

ただし、上記のsubstringソリューションcompareToはより読みやすくなっています。

以下も参照してください。

于 2010-05-01T04:03:51.650 に答える
0

ハッシュ関数やソートのようにハッシュを意味しないと仮定すると...

String の「ラッパー」クラスを作成し、compareTo メソッドをオーバーライドすることで、これを簡単に実現できます。

于 2010-05-01T05:34:29.950 に答える