Search code examples
javahashmap

Convert HashMap.toString() back to HashMap in Java


I put a key-value pair in a Java HashMap and converted it to a String using the toString() method.

Is it possible to convert this String representation back to a HashMap object and retrieve the value with its corresponding key?

Thanks


Solution

  • toString() approach relies on implementation of toString() and it can be lossy in most of the cases.

    There cannot be non lossy solution here. but a better one would be to use Object serialization

    serialize Object to String

    private static String serialize(Serializable o) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(o);
        oos.close();
        return Base64.getEncoder().encodeToString(baos.toByteArray());
    }
    

    deserialize String back to Object

    private static Object deserialize(String s) throws IOException,
            ClassNotFoundException {
        byte[] data = Base64.getDecoder().decode(s);
        ObjectInputStream ois = new ObjectInputStream(
                new ByteArrayInputStream(data));
        Object o = ois.readObject();
        ois.close();
        return o;
    }
    

    Here if the user object has fields which are transient, they will be lost in the process.


    old answer


    Once you convert HashMap to String using toString(); It's not that you can convert back it to Hashmap from that String, Its just its String representation.

    You can either pass the reference to HashMap to method or you can serialize it

    Here is the description for toString() toString()
    Here is the sample code with explanation for Serialization.

    and to pass hashMap to method as arg.

    public void sayHello(Map m){
    
    }
    //calling block  
    Map  hm = new HashMap();
    sayHello(hm);