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

两个映射的交换值

常朗
2023-03-14

我是初学者,我想通过使用两个旧映射hm1和hm2创建一个新映射hm3,在该映射中,我需要第二个映射的值作为键,第一个映射的值作为值,例如:如果映射hm1包含a1作为key1和abc作为value1,它还包含a2作为key2和xyz作为value2,并且还有另一个映射hm2,它包含a1作为key1和b1作为value1,还包含a2作为key2和b2作为value2,那么在映射hm3中,我需要b1作为key1和abc作为value1,而b2则需要key2和xyz作为value2

    public class MapInterchange {

    public static void main(String[] args) {

        HashMap<String, String> hm1 = new HashMap<String, String>();
        Map.Entry m1;
        hm1.put("a1", "abc");
        hm1.put("a2", "xyz");

        for (Map.Entry m : hm1.entrySet()) {
            System.out.println(m.getKey() + " " + m.getValue());
        }

        HashMap<String, String> hm2 = new HashMap<String, String>();

        hm2.put("a1", "b1");
        hm2.put("a2", "b2");

        for (Map.Entry m : hm2.entrySet()) {
            System.out.println(m.getKey() + " " + m.getValue());
        }

        HashMap<Object, Object> hm3 = new HashMap<Object, Object>();

        Iterator itr = ((Set<Entry<String, String>>) hm1).iterator();
        while (itr.hasNext()) {
            hm3.put(((Entry) hm2).getValue(), ((Entry) hm1).getValue());
        }

        for (Map.Entry m : hm3.entrySet()) {
            System.out.println(m.getKey() + " " + m.getValue());
        }

     }

    }


The exception I'm getting is : Exception in thread "main" java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.Set
    at com.sid.MapInterchange.main(MapInterchange.java:34)

请提供更正的代码,我将非常感谢

共有1个答案

袁弘化
2023-03-14

不能将HashMap强制转换为一组条目。使用entryset方法。

Iterator<Map.Entry<String,String>> itr = hm1.entrySet().iterator();
while (itr.hasNext()) {
    Map.Entry<String,String> entry = itr.next();
    hm3.put(entry.getKey(), entry.getValue());
}

编辑:我不确定这段代码能做你想做的事情,但它克服了你的错误。不清楚你想交换什么。

如果值的映射是基于键的,那么代码应该是:

Iterator<Map.Entry<String,String>> itr = hm1.entrySet().iterator();
while (itr.hasNext()) {
    Map.Entry<String,String> entry = itr.next();
    hm3.put(hm2.get(entry.getKey()), entry.getValue());
}
 类似资料:
  • 我有两个地图,键为整数,值为双倍。 我想创建第三个按键排序的映射,值将是两个映射的双精度列表。 地图1: Map2: 最终地图: 如上所述,如果一个地图中的一个键在另一个地图中丢失,则另一个地图的最终地图中的值应默认为0.00 我可以使用putAll方法将所有键放入第三张地图。但如何按照我的意愿设定这些值呢? 感谢阅读!

  • 我有一些代码需要帮助...我正在尝试使用两个地图作为源并同时使用java lambdas构建地图 我可以用你们在上面看到的foreach做到这一点,但我试图用lambdas做到这一点。。。像这样的 我想要的输出是这样的 但我无法理解

  • 问题内容: 我正在尝试了解go的内部原理。考虑以下代码 上面的代码完美地交换了2个数字,a变成5,b变成10。我无法理解它是如何工作的。在第二行代码中考虑,如果将a首先分配给b,则b将为10。现在,如果将b分配给a,那么a也不应也为10。 请帮助我了解它是如何工作的 谢谢 问题答案: TL; DR :反汇编表明CPU必须足够聪明才能看到正在发生的事情,并使用寄存器来避免覆盖内存中的现有值。 这个问

  • 我想将我的应用程序迁移到Spring Boot Jar部署。它目前使用没有启动的Spring4。 我在上有一个REST-API侦听器,在上有一个JavaScript-fronten,可以在上访问。 现在我找不到在靴子里做同样的事情的方法。 通过更改属性,我设法在处获得了api监听,但是我没有在处注册第二个servlet来为我的js-frontend服务。我知道jar部署不支持,我还知道Spring

  • 问题内容: 我需要将两个表映射到一个类,但很难弄清楚。一个表是ROOMS,另一个表是TRAINERS。 ROOMS表: 培训人员表: 表应当加入了,和。 ROOMS表的主键是:。TRAINERS表的主键是:。 我需要通过查询这个数据,,,,和。 在SQL中,可能类似于: 我正在项目中其他地方使用ROOMS表,它已经映射为独立对象。是否有一种方法可以将其用作TRAINERS对象的子对象,或者将这两个