当前位置: 首页 > 知识库问答 >
问题:

使用单个参数接收HashMap<String,Integer>和HashMap<Long,Inteller>值的Java方法是否可行?

奚才良
2023-03-14

我想创建一个按键对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方法,该方法可以接收两个<code>HashMap的值

共有2个答案

东门城
2023-03-14

您可以在java中使用<code>Generics</code>来定义一个适用于特定类型的方法,例如Sting和Long(两者都是Comparable)。代码如下所示:

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;
}

这里<代码>

尉迟阳煦
2023-03-14

您可以引入一个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;
}

 类似资料:
  • 我想知道的所有值是否为空。除了必须检查映射中每个条目中的值之外,还有什么是最好的方法?

  • 我有一个散列表 这是我的代码 我应该对我的代码做什么样的修改来确保它能按照我的要求编译和运行?

  • 我有和如下代码所示: 我尝试用< code>HashMap值替换该字符串,但这不起作用,因为< code>test是最终的,不能在< code>forEach的主体中重新分配。 那么有没有用Java 8 Stream API将< code>String替换为< code>HashMap的解决方案呢?

  • 本文向大家介绍Spring Boot接收单个String入参的解决方法,包括了Spring Boot接收单个String入参的解决方法的使用技巧和注意事项,需要的朋友参考一下 前言 接受参数是我们在日常开发中经常会遇到的一个需求,下面这篇文章主要给大家介绍了关于Spring Boot接收单个String入参之解决方案的相关内容,下面话不多说了,来一起看看详细的介绍吧 场景: 在做接口时,有的时候,

  • 我有两个哈希图。其中每一个都有键,就像下面的hashmap一样。 此映射由DB2数据库查询输出的值填充。我注意到,即使我有两个这样的hashmap,并且如果我尝试检索hashmap键的值,它也总是返回null。我通过在监视窗口中添加所有需要的变量进行了检查。我觉得一切都很好。 我的代码的一小部分。 注意:inputMessageDbRecords的类型是

  • 有谁知道如何修复这个类投射异常错误?我得到:“线程”main“中的异常java.lang.ClassCastException:java.util.HashMap$Entry不能转换为java.lang.Integer? 我的问题是,我以为我调用的是那个位置的整数,但显然不是?这项作业两小时后到期,所以任何帮助都是非常感谢的。评论应该告诉你发生了什么。