Java中复制HashMap时如何将浮点键转换为整数键?

问题描述 投票:0回答:2

Stack Overflow 社区您好,

我在使用 Java 的 HashMap 时遇到了挑战。我有两个 HashMap,map1 和 map2,其中 map1 具有 Float 类型的键,map2 具有 Integer 类型的键。现在,我需要将条目从map1复制到map2。

import java.util.Map;
import java.util.HashMap;

public class Q9 {
    public static void main(String[] args) {
        Map<Float, String> map1 = new HashMap<>();
        Map<Integer, String> map2 = new HashMap<>();

        // Adding entries to map1
        map1.put(11.1f, "black");
        map1.put(12.1f, "brown");
        map1.put(13.1f, "Grey");
        map1.put(14.1f, "blue");

        // Now, I want to copy the entries from map1 to map2 with Integer keys
        // map2.putAll(map1); // This line gives a compilation error due to key type mismatch

        // How can I convert the Float keys from map1 to Integer keys to successfully copy entries to map2?

    }
}

我希望获得有关如何将键从浮点转换为整数的指导,以便我可以成功地将条目从map1复制到map2。任何见解、代码示例或最佳实践都非常有价值。

感谢您的协助!

java hashmap type-conversion
2个回答
5
投票

您可以在将键更改为

map1
后迭代
map2
并将每个条目插入到
Integer

for(Map.Entry<Float, String> entry : map1.entrySet()) 
  map2.put(entry.getKey().intValue(), entry.getValue()); 

2
投票

迭代条目并转换键值。

for (Map.Entry<Float, String> entry : map1.entrySet()) {
    map2.put((int)(float)entry.getKey(), entry.getValue());
}

我们需要双重投射来触发

float
自动拆箱和
int
自动装箱。

或者直接手动拆箱到

int
,然后让编译器自动装箱。

for (Map.Entry<Float, String> entry : map1.entrySet()) {
    map2.put(entry.getKey().intValue(), entry.getValue());
}

警告:如果两个或多个

float
值转换为相同的
int
值,则任意哪个条目获胜。这就是
HashMap
排序的本质。

© www.soinside.com 2019 - 2024. All rights reserved.