morellik ha scritto:
Utilizzando questa struttura dovrei creare una pagina html che piu' o meno imiti quella che si vede nel post.
Dovresti anche precisare (perché può contare) con quale tecnologia viene generata la pagina. Server side (es. JSP)? Client side (es. Angular ecc..)? Altro?
morellik ha scritto:
Ho provato con una HashMap<String, HashMap<String, List<String>>> ma non so esattamente come riempirla.
Attenzione che HashMap è "unordered", ovvero NON c'è un ordine specifico per le chiavi. Se ti interessa garantire l'ordine delle chiavi, HashMap non è appropriato.
morellik ha scritto:
In questo modo il secondo put sovrascrive il primo o si somma?
put a parità di chiave,
sovrascrive sempre il valore.
morellik ha scritto:
Secondo voi potrebbe essere una struttura dati che funziona o ce ne sono altre migliori?
Salvo la questione sulla implementazione di Map da usare, di per sé è valido, cioè sarebbe accettabile. Ma bisogna anche vedere come poi la usi (cioè come/da chi viene scansionata tutta questa struttura).
Altrimenti dovresti modellare il tutto con delle classi, es. classe MacroServizio con attributi: nome (String) e servizi (lista oggetti Servizio), ecc...
E se devi fare tanti inserimenti da codice, ti conviene "incapsulare" la gestione della struttura per offrire un metodo es.
public void aggiungiFacility(String macroServizio, String servizio, String... facilities)
Il metodo cerca il macroServizio (se non c'è lo inserisce), poi cerca il servizio (se non c'è lo inserisce), poi aggiunge alla lista di facility le facilities in argomento.
Ma si può anche pensare di creare la struttura in modo "fluente" tramite un apposita classe "builder", un
uso del tipo:
Map<String, Map<String, List<String>>> struttura = new StrutturaBuilder()
.macroCategoria("Macrocategoria 1")
.servizio("Servizio 1")
.facility("Centro1")
.servizio("Servizio 2")
.facility("Centro1")
.facility("Centro2")
// ........
.build();
Chiaramente con StrutturaBuilder da fare.