为了账号安全,请及时绑定邮箱和手机立即绑定

用于 TreeMap 的 Java Spring 比较器

用于 TreeMap 的 Java Spring 比较器

largeQ 2023-02-23 15:58:34
我试图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:200A:500A:10000但是,当我的应用程序调用 get Result 时,它会打印出:A:10000A:200A:500这是字符顺序。所以我想知道我是否通过在类定义中放置比较器做错了什么。
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

您的语法不正确。使用 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>() {

    public int compare(String a, String b) {

        return a.length - b.length;

});

第二个(使用 Comparator 的实用程序)绝对是三个中最好的。请注意,您可以链接(表示:首先对这个事物进行排序,如果它们相同,然后对这个事物进行排序,但反过来:您可以这样做)。


查看完整回答
反对 回复 2023-02-23
  • 1 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信