SortedMap
春のプロジェクトの1つで、カスタマイズされたコンパレータを使用しようとしていました。これは、文字列の後半(キー)でソートしようとしているSortedMapです。キー「A:123」の例。
カスタマイズされたコンパレータを追加して、SortedMap が文字列順ではなく整数順になるようにしました。
これは単純化されたサンプル コードです。内部に SortedMap を含むクラスがあります。
class TestObject{
private SortedMap<String, String> myMap = new TreeMap<String, String>({
new Comparator<String>()
{
@Override
public int compare(String s1, String s2)
{
int m1 = Integer.parseInt(O1.split(":")[1]);
int m2 = Integer.parseInt(O2.split(":")[1]);
return m1- m2;
}
});
void setMap(SortedMap<String, String> maps){
myMap = maps;
}
void getMap(){ return myMaps; }
}
そして、私の主な機能の中で私がした:
class UpperClass{
@Autowired
TestObject object1;
public setNewMap(){
SortedMap<String, String> myInput = new TreeMap<String, String>({
//my comparator
});
myInput.put("A:10000", "XXX");
myInput.put("A:500","XXX");
myInput.put("A:200","XXX");
object1.setMap(myInput);
}
pubic getResult(){
SortedMap<String, String> result = object1.getMap();
}
}
そのため、アプリケーションをリモート デバッガします。クラス定義内のコンパレータが呼び出されなかったようです。行ごとに出力し、myInput は出力ごとに文字列の順序を維持しました。
A:200
A:500
A:10000
ただし、私のアプリケーションが get Result を呼び出すと、次のように出力されます。
A:10000
A:200
A:500
それは文字順です。それで、クラス定義内にコンパレーターを入れて何か間違ったことをしたのだろうかと思います。