用于 TreeMap 的 Java Spring 比较器

我试图SortedMap在我的一个春季项目中使用定制比较器。这是一个 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

这是字符顺序。所以我想知道我是否通过在类定义中放置比较器做错了什么。


largeQ
浏览 160回答 1
1回答

千巷猫影

您的语法不正确。使用 lambda 的方法:new TreeMap<String, String>((a, b) -> a.length() - b.length());使用 Comparator 的实用方法:new TreeMap<String, String>(Comparator::comparingInt(String::length));老式:new TreeMap<String, String>(new Comparator<String>() {&nbsp; &nbsp; public int compare(String a, String b) {&nbsp; &nbsp; &nbsp; &nbsp; return a.length - b.length;});第二个(使用 Comparator 的实用程序)绝对是三个中最好的。请注意,您可以链接(表示:首先对这个事物进行排序,如果它们相同,然后对这个事物进行排序,但反过来:您可以这样做)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java