我试图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 的实用程序)绝对是三个中最好的。请注意,您可以链接(表示:首先对这个事物进行排序,如果它们相同,然后对这个事物进行排序,但反过来:您可以这样做)。
添加回答
举报
0/150
提交
取消