javahashmapmapsnested-map

How to place a Map into another Map in Java


I'm doing a personal project.

After a lot of maps, I came to the point where I want to enter a map inside another map... Let me explain better.

I have this Map atPropostas which have information about a person, but at some time of the program, I want to add to that person a boss email.

private Map<String, Long> atPropostas;
private Map<String,Map<String,Long>> atOrientadores;

To add that boss email, I've done this:

for (Map.Entry<String, Long> atprop : atPropostas.entrySet()) {
    for (Map.Entry<String, Proposta> prop : propostas.entrySet()) {
        if (prop.getValue().getTipo().equals("T2") && propostas.containsKey(atprop.getKey())) {
            atOrientadores.put(prop.getValue().getEmailDocente(), atprop);
        }
    }
}

But, atprop value, inside atOrientadores.put() it produces an error:

java: incompatible types: java.util.Map.Entry<java.lang.String,java.lang.Long> cannot be

converted to java.util.Map<java.lang.String,java.lang.Long>

I have tried to cast the atprop:

 atOrientadores.put(prop.getValue().getEmailDocente(), (Map<String, Long>) atprop);

And the compiler error disappears, but the App itself, doesn't working.


Solution

  • You can't convert Map.Entry in to a Map with casting.

    Map and entry represent inherently different notions. Map consists of entries, it isn't an entry.

    You can create a single entry map by using static method Map.ofEntries() available with Java 9

    atOrientadores.put(prop.getValue().getEmailDocente(), Map.ofEntries(atprop));
    

    Sidenote: it's highly advisable to use English while giving names to variables, classes, etc. in your application. It makes it easier to reason about your code.

    I don't know for sure what atprop is meant to represent, but you've mentioned a person and an email. I advise you to consider creating classes that would correspond to a person and an email instead of complicating your code and dealing with nested maps.