和 HashMap可能的?,java,hashmap"/>

首页 > 解决方案 > 是带有单个参数的 Java 方法来接收两个 HashMap 的值和 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>类型的值?

标签: javahashmap

解决方案


您可以引入一个T需要实现的Comparable<T>,然后用Longwith替换任何用法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;
}

推荐阅读