我有这段代码填充HashMap
并将其传递给TreeMap
,以Key
值的自然顺序对其进行排序。
Map<Integer, String[]> hashMap = new HashMap<Integer, String[]>();
hashMap.put(3, new String[]{"1","2"});
hashMap.put(2, new String[]{"1","2"});
hashMap.put(4, new String[]{"1","2"});
hashMap.put(1, new String[]{"1","2"});
System.out.println(hashMap);
Map<Integer, String[]> treeMap = new TreeMap<Integer, String[]>(hashMap);
System.out.println(hashMap); // Natural Order, Ascending
现在我的问题是,如何在treeMap
订单中对Descending
进行排序?我已经准备好了名为KeyComparator
的Comparator类,它将Key
按降序排序。以下是我的代码:
public class KeyComparator implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 < o2) {
return 1;
} else if (o1 > o2) {
return -1;
} else {
return 0;
}
}
}
TreeMap
没有2个参数化的构造函数,例如TreeMap(new KeyComparator(),hashMap)
。如何同时使用我的KeyComparator
班级将hashMap
加载到我的treeMap
。
答案 0 :(得分:2)
如下所示,使用Comparator
创建一个树形图,然后使用putAll
方法将hashmap传递给它。
Map<Integer, String[]> treeMap = new TreeMap<Integer, String[]>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 < o2) {
return 1;
} else if (o1 > o2) {
return -1;
} else {
return 0;
}
}
});
treeMap.putAll(hashMap);
System.out.println(treeMap); // Descending
注意: - 在上面的示例中,我传递了Comparator
的匿名实现。您始终可以在构造函数中传递KeyComparator
。
答案 1 :(得分:1)
虽然这可能无法解答您的问题,但为什么不简单地使用数组对其进行排序?
System.out.println("map: " + hashMap);
List<Integer> keys = new ArrayList<Integer>(hashMap.keySet());
System.out.println("unsorted keys: " + keys);
Collections.sort(keys);
System.out.println("sorted (asc) keys: " + keys);
Collections.reverse(keys);
System.out.println("sorted (desc) keys: " + keys);
答案 2 :(得分:1)
如前所述,首先需要使用带有密钥比较器的构造函数TreeMap(Comparator<? super K> comparator)
,然后使用putAll(Map<? extends K,? extends V> m)
添加所有条目。
如果您使用 Java 8 ,则无需重新实现它,只需使用Comparator.reverseOrder()
即可获得自然排序的反向:
UPDATE Table_A
SET Table_A.email_address = (SELECT Table_B.email_address
FROM Table_B
WHERE Table_A.member_id = Table_B.member_id
)
WHERE (SELECT 1 FROM Table_B WHERE Table_A.member_id = Table_B.member_id);
答案 3 :(得分:0)
TreeMap有一个不错的方法。你可以做到
TreeMap<Integer, String[]> map = new TreeMap<>(hashMap);
NavigleMap<Integer, String[]> reversedMap = map.descendingMap();
答案 4 :(得分:0)
首先使用比较器创建一个空的TreeMap
Map<Integer, String[]> treeMap = new TreeMap<Integer, String[]>(new KeyComparator());
treeMap.putAll(hashMap);
http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html#TreeMap(java.util.Comparator)
您可能需要调整语法