簡體   English   中英

TreeMap的Java Spring比較器

[英]Java Spring Comparator for TreeMap

我試圖在我的一個春季項目中使用帶有自定義比較器的SortedMap 這是一個SortedMap,在這里我嘗試按字符串的后半部分(這是鍵)進行排序。 鍵“ A:123”的示例。

我添加了一個自定義的比較器,以確保SortedMap按Integer順序而不是String順序進行。

這是一個簡化的示例代碼,我里面有帶有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

這是字符順序。 所以我想知道是否通過將比較器放在類定義中做錯了什么。

您的語法不正確。 使用lambdas的方式:

new TreeMap<String, String>((a, b) -> a.length() - b.length());

使用比較器的實用程序方法:

new TreeMap<String, String>(Comparator::comparingInt(String::length));

老式:

new TreeMap<String, String>(new Comparator<String>() {
    public int compare(String a, String b) {
        return a.length - b.length;
});

第二個(使用Comparator的實用程序)絕對是這三個中最好的。 請注意,您可以鏈接(代表:首先對此事物進行排序,如果相同,則對該事物進行排序,但相反:您可以這樣做)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM