Mappa con Class come chiave

Gol_D_Roger
Salve, Qualcuno potrebbe gentilmente spiegarmi il significato di questo in Java:

Map>

In particolare l'esercizio mi chiede : scrivere il codice del metodo Map raggruppaRobotPerTipo() . In particolare questo metodo deve scandire tutto il campo di battaglia ed accumulare i robot di ciascuna tipologia in un insieme associato all'oggetto Class corrispondente alla sua tipologia.

Lo so che detto cosi potrebbe non essere molto chiaro ma è giusto per avere un'idea di quello che fa. Ho cercato online ma non ho trovato molto.

Grazie mille in anticipo.

Risposte
apatriarca
Di che linguaggio stiamo parlando? Suppongo che ad ogni robot corrisponda una classe per cui devi semplicemente iterare su tutti i robot e aggiungerlo al set corrispondente alla sua classe nella mappa che poi andrai a restituire. Qualcosa tipo (pseudocodice):
for (robot in robots) {
    resultMap[ robot.class() ].insert(robot);
}

Gol_D_Roger
Quindi devo solamente aggiungere al set i robot?

apatriarca
Direi che l'idea sembrerebbe quella..

Gol_D_Roger
Grazie mille!

Gol_D_Roger
In java ho provato a fare questo,

public Map> raggruppaRobotPerTipo() {
Set set = new HashSet();
for(Robot r : this.posizione2robot.values()){
set.add(r);
this.posizione2robot.put(Robot.class,set);
}
return ;

ma non credo sia giusto e non so cosa devo ritornare.Potreste aiutarmi? Grazie in anticipo.

Il titolo dell'esercizio è questo:

scrivere il codice del metodo Map raggruppaRobotPerTipo() nella classe Battlefield. In particolare questo metodo deve scandire tutto il campo di battaglia ed accumulare i robot di ciascuna tipologia in un insieme associato all'oggetto Class corrispondente alla sua tipologia.

apatriarca
Direi di partire dal valore di ritorno del metodo.. Devi restituire una instanza di Map> per cui direi che la prima cosa da fare sia creare tale istanza (nota che è da tanto che non programmo in Java per cui potrei fare qualche errore di sintassi).
Map<Class, Set<Robot>> result = new Map<Class, Set<Robot>>();

È in questa mappa e non in posizione2robot che devi inserire i robot. In effetti posizione2robot contiene già quei valori (stai iterando su di essa..). La principale difficoltà a questo punto sta nel fatto che la prima volta che incontri una classe devi creare il corrispondente Set. L'idea è di usare qualcosa come segue:
if (!result.containsKey(r.class)) {
    result.put(r.class, new HashSet<Robot>());
}
result.get(r.class).add(r);

Gol_D_Roger
sei stato chiarissimo, grazie mille!!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.