我想创建一个将按键对HashMap排序的方法。 HashMap的键可以是String或Long。两种HashMap类型的处理相似。为了避免代码重复,我想创建一个方法来处理两种情况。
方法的代码:
static LinkedHashMap<Long, Integer> sortNumberHashMapByKey(HashMap<Long, Integer> map){
ArrayList<Long> keys = new ArrayList<>(map.keySet());
ArrayList<Integer> values = new ArrayList<>(map.values());
Collections.sort(keys);
Collections.sort(values);
LinkedHashMap<Long, Integer> sortedMap = new LinkedHashMap<>();
for (Integer value : values) {
Iterator<Long> keyIt = keys.iterator();
while (keyIt.hasNext()){
Long key = keyIt.next();
if (map.get(key).equals(value)){
keyIt.remove();
sortedMap.put(key, value);
break;
}
}
}
return sortedMap;
}
是否可以创建一个具有单个参数的Java方法,该方法可以接收HashMap<String, Integer>
和HashMap<Long, Integer>
类型的值?
答案 0 :(得分:1)
您可以引入一个T
,它需要实现Comparable<T>
,然后将Long
的任何用法替换为T
:
static <T extends Comparable<T>> LinkedHashMap<T, Integer> sortNumberHashMapByKey(HashMap<T, Integer> map){
ArrayList<T> keys = new ArrayList<>(map.keySet());
ArrayList<Integer> values = new ArrayList<>(map.values());
Collections.sort(keys);
Collections.sort(values);
LinkedHashMap<T, Integer> sortedMap = new LinkedHashMap<>();
for (Integer value : values) {
Iterator<T> keyIt = keys.iterator();
while (keyIt.hasNext()){
T key = keyIt.next();
if (map.get(key).equals(value)){
keyIt.remove();
sortedMap.put(key, value);
break;
}
}
}
return sortedMap;
}
答案 1 :(得分:0)
您可以在Java中使用Generics
来定义适用于特定类型e.i的方法。在您的情况下,Sting和Long(都是可比的)代码将如下所示:
static <E extends Comparable<E>> LinkedHashMap<E, Integer> sortNumberHashMapByKey(HashMap<E, Integer> map){
ArrayList<E> keys = new ArrayList<>(map.keySet());
ArrayList<Integer> values = new ArrayList<>(map.values());
Collections.sort(keys);
Collections.sort(values);
LinkedHashMap<E, Integer> sortedMap = new LinkedHashMap<>();
for (Integer value : values) {
Iterator<E> keyIt = keys.iterator();
while (keyIt.hasNext()){
E key = keyIt.next();
if (map.get(key).equals(value)){
keyIt.remove();
sortedMap.put(key, value);
break;
}
}
}
return sortedMap;
}
这里<E extends Comparable<E>>
是您要传递给方法的类型。然后在您的代码中使用此类型E
来执行String
和Long
都通用的操作。