1

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

それは文字順です。それで、クラス定義内にコンパレーターを入れて何か間違ったことをしたのだろうかと思います。

4

1 に答える 1