Search code examples
javahashmaptype-conversion

How to Convert Float Keys to Integer Keys when Copying HashMap in Java?


Hello Stack Overflow community,

I have encountered a challenge while working with Java's HashMaps. I have two HashMaps, map1 and map2, where map1 has keys of type Float and map2 has keys of type Integer. Now, I need to copy the entries from map1 to 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?

    }
}

I would appreciate guidance on how to convert the keys from Float to Integer so that I can successfully copy the entries from map1 to map2. Any insights, code examples, or best practices would be highly valuable.

Thank you for your assistance!


Solution

  • Iterate the entries and cast the key value.

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

    We need to double-cast to trigger float auto-unboxing and int auto-boxing.

    Alternative is it unbox directly to int manually, and let the compiler auto-box that.

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

    Warning: If two or more float values converts to the same int value, it is arbitrary which entry wins. That is the nature of HashMap ordering.