-
紫衣仙女
您可以将 Comparator 作为参数传递给 Map 的构造函数。根据文档,它仅用于键:/** * Constructs a new, empty tree map, ordered according to the given * comparator. All keys inserted into the map must be <em>mutually * comparable</em> by the given comparator: {@code comparator.compare(k1, * k2)} must not throw a {@code ClassCastException} for any keys * {@code k1} and {@code k2} in the map. If the user attempts to put * a key into the map that violates this constraint, the {@code put(Object * key, Object value)} call will throw a * {@code ClassCastException}. * * @param comparator the comparator that will be used to order this map. * If {@code null}, the {@linkplain Comparable natural * ordering} of the keys will be used. */public TreeMap(Comparator<? super K> comparator) { this.comparator = comparator;}通过这种方式,您可以通过密钥长度传递比较器,如下所示:new TreeMap<>(Comparator.comparingInt(String::length).thenComparing(Comparator.naturalOrder()))
-
万千封印
您需要为此编写自己comparator的并在 中使用它TreeMap,例如:public class StringComparator implements Comparator<String> { @Override public int compare(String s1, String s2) { return s1.length() == s2.length() ? s1.compareTo(s2) : s1.length() - s2.length(); } public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException { Map<String, String> map = new TreeMap<>(new StringComparator()); map.put("IBARAKI", "MitoCity"); map.put("TOCHIGI", "UtunomiyaCity"); map.put("GUNMA", "MaehashiCity"); map.put("SAITAMA", "SaitamaCity"); map.put("CHIBA", "ChibaCity"); map.put("TOKYO", "Sinjyuku"); map.put("KANAGAWA", "YokohamaCity"); System.out.println(map); }}这不处理null值,但如果您null在用例中期望值,您可以添加处理。
-
不负相思意
您可以按如下方式执行此操作。 public static void main(String[] args) { Map<String, String> map = new TreeMap<>(new CustomSortComparator()); map.put("IBARAKI", "MitoCity"); map.put("TOCHIGI", "UtunomiyaCity"); map.put("GUNMA", "MaehashiCity"); map.put("SAITAMA", "SaitamaCity"); map.put("CHIBA", "ChibaCity"); map.put("TOKYO", "Sinjyuku"); map.put("KANAGAWA", "YokohamaCity"); System.out.println(map); }CustomSortComparator 的定义如下。public class CustomSortComparator implements Comparator<String> { @Override public int compare(String o1, String o2) { if (o1.length() > o2.length()) { return 1; } if (o1.length() < o2.length()) { return -1; } return returnCompareBytes(o1, o2); } private int returnCompareBytes(String key1, String key2) { for (int i = 0; i < key1.length() - 1; i++) { if (key1.charAt(i) > key2.charAt(i)) { return 1; } if (key1.charAt(i) < key2.charAt(i)) { return -1; } } return 0; }}