TreeMap
カスタムソート順で Javaを作成したいと考えています。文字列であるソートされたキーは、2 番目の文字に従ってソートする必要があります。値も文字列です。
サンプル マップ:
Za,FOO
Ab,Bar
TreeMap
カスタムソート順で Javaを作成したいと考えています。文字列であるソートされたキーは、2 番目の文字に従ってソートする必要があります。値も文字列です。
サンプル マップ:
Za,FOO
Ab,Bar
次のようなカスタム コンパレータを使用できます。
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
はより読みやすくなっています。
ハッシュ関数やソートのようにハッシュを意味しないと仮定すると...
String の「ラッパー」クラスを作成し、compareTo メソッドをオーバーライドすることで、これを簡単に実現できます。