使用自定义Comparator在Java中创建SortedMap
我想用Java自定义排序顺序创建一个TreeMap
。 作为字符串的排序键需要根据第二个字符进行排序。 值也是字符串。
示例地图:
Za,FOO Ab,Bar
您可以使用这样的自定义比较器:
Comparator secondCharComparator = new Comparator () { @Override public int compare(String s1, String s2) { return s1.substring(1, 2).compareTo(s2.substring(1, 2)); } };
样品:
SortedMap map = new TreeMap(secondCharComparator); map.put("Za", "FOO"); map.put("Ab", "BAR"); map.put("00", "ZERO"); System.out.println(map); // prints "{00=ZERO, Za=FOO, Ab=BAR}"
请注意,这只是假设String
在索引1处有一个字符。如果不是,则抛出StringIndexOutOfBoundsException
。
或者,您也可以使用此比较:
return s1.charAt(1) - s2.charAt(1);
这个减法“技巧”一般都被打破了,但它在这里工作正常,因为两个char
的减法不会溢出一个int
。
但是,上面的substring
和compareTo
解决方案更具可读性。
也可以看看:
- Java Integer:什么是更快的比较或减法?
假设你并不是指散列函数或排序中的Hash ……
您可以通过为String创建“包装器”类并重写compareTo方法来轻松完成此操作