具有单个参数的Java方法是否可以接收HashMap <String,Integer>和HashMap <Long,Integer>的值?

时间:2019-12-16 16:41:35

标签: java hashmap

我想创建一个将按键对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>类型的值?

2 个答案:

答案 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来执行StringLong都通用的操作。