Riprendo questo post poiché mi sono imbattuto di nuovo in un problema simile.
Sto esercitandomi su un esercizio che gestisce un campionato di calcio.
Il campionato è costituito da una serie di squadre ognuna delle quali è rappresentata da un nome e da una città.
Da un elenco di giornate rappresentate da un numero progressivo, la data e una serie d'incontri.
Un incontro viene disputato da una squadra di casa e da una in trasferta in un determinato stadio.
Queste sono le classi del mio progetto:
// Campionato
public class Campionato {
    
    private List<Squadre> listaSquadre = new ArrayList<Squadre>();
    private List<Giornata> listaGiornate = new ArrayList<Giornata>();
    
    public Campionato() {}
    public List<Squadre> getListaSquadre() {
        return listaSquadre;
    }
    public List<Giornata> getListaGiornate() {
        return listaGiornate;
    }
    public void setListaSquadre(List<Squadre> listaSquadre) {
        this.listaSquadre = listaSquadre;
    }
    public void setListaGiornate(List<Giornata> listaGionate) {
        this.listaGiornate = listaGionate;
    }
    
    public void aggiungiSquadra (Squadre s) {
        this.listaSquadre.add(s);
    }
    
    public void aggiungiGiornata (Giornata g) {
        this.listaGiornate.add(g);
    }
    
}
// Squadre
public class Squadre {
    
    private String nome;
    private String citta;
    
    public Squadre() {}
    
    public Squadre(String nome, String citta) {
        this.citta = citta;
        this.nome = nome;
    }
    public String getNome() {
        return nome;
    }
    public String getCitta() {
        return citta;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public void setCitta(String citta) {
        this.citta = citta;
    }
    @Override
    public String toString() {
        return nome;
    }
    
    public String toStringClasse() {
        String stringa="";
        stringa += "Nome" + nome +"\n";
        stringa += "Città" + citta;
        return stringa;
    }
// Giornata
public class Giornata {
    
    private String numeroGiornata;
    private Calendar data = new GregorianCalendar();
    private List<Incontri> listaIncontri = new ArrayList<Incontri>();
    
    public Giornata() {}
    
    public Giornata(String numeroGiornata, Calendar data) {
        this.numeroGiornata = numeroGiornata;
        this.data = data;
        data.getTime();
        data.setLenient(false);
    }
    public String getNumeroGiornata() {
        return numeroGiornata;
    }
    public Calendar getData() {
        return data;
    }
    public List<Incontri> getListaIncontri() {
        return listaIncontri;
    }
    public void setNumeroGiornata(String numeroGiornata) {
        this.numeroGiornata = numeroGiornata;
    }
    public void setData(Calendar data) {
        this.data = data;
    }
    public void setListaIncontri(List<Incontri> listaIncontri) {
        this.listaIncontri = listaIncontri;
    }
    
    public void aggiungiIncontro(Incontri incontro) {
        this.listaIncontri.add(incontro);
    }
    
    public Incontri getIncontri(int i) {
        return this.listaIncontri.get(i);
    }
    
    public String toStringData() {
       Date d = data.getTime();
       SimpleDateFormat giorno = new SimpleDateFormat("EEEE dd-MMMM-yyyy"); 
       return giorno.format(d);
     
    }
    @Override
    public String toString() {
        return "Giornata{" + "numeroGiornata=" + numeroGiornata + ", data=" + toStringData() + ", listaIncontri=" + listaIncontri + '}';
    }
// incontri
public class Incontri {
    
    private String stadio;
    private Squadre squadraCasa;
    private Squadre squadraTrasferta;
    
    public Incontri() {}
    
    public Incontri(String stadio, Squadre squadraCasa, Squadre squadraTrasferta) {
        this.stadio = stadio;
        this.squadraCasa = squadraCasa;
        this.squadraTrasferta = squadraTrasferta;
    }
    public String getStadio() {
        return stadio;
    }
    public Squadre getSquadraCasa() {
        return squadraCasa;
    }
    public Squadre getSquadraTrasferta() {
        return squadraTrasferta;
    }
    public void setStadio(String stadio) {
        this.stadio = stadio;
    }
    public void setSquadraCasa(Squadre squadraCasa) {
        this.squadraCasa = squadraCasa;
    }
    public void setSquadraTrasferta(Squadre squadraTrasferta) {
        this.squadraTrasferta = squadraTrasferta;
    }
    @Override
    public String toString() {
        return "Incontri{" + "stadio=" + stadio + ", squadraCasa=" + squadraCasa + ", squadraTrasferta=" + squadraTrasferta + '}';
    }
Il problema mi si ripresenta quando devo contare quante partite sono state giocate in un determinato stadio
Ho pensato quindi di scrivere queste linee di codice
// nella classe Giornata
public Map<String, Integer> getConta() {
        Map<String, Integer> risultato = new HashMap<String, Integer>();
        
            for (Incontro incontro : listaIncontri ) {
                String stadio = incontro.getStadio();
                if (risultato.containsKey(stadio)) {
                    Integer vecchioValore = risultato.get(stadio);
                    vecchioValore++;
                    risultato.put(stadio, vecchioValore);
                } else {
                    risultato.put(stadio, 1);
                }
            }
        
        return risultato;
    }
e nella JDialog dove visualizzo la tabella:
public void inizializzaTabellaConta() {
        Giornata giornata= (Giornata) this.vista.getModello().getBean(Costanti.GIORNATA);
        
        if ( giornata == null ) {
            
            this.visualizzaFinestraErrore(" Errore inizializzazione Scomparsi----Non è stato possibile inizializzare la Tabella Scomparsi");
        }else{
            logger.info("GIORNATA" + giornata.toString());
            ModelloTabellaStatistiche mts = new ModelloTabellaStatistiche(giornata.conta());
            this.tabellaStatistiche.setModel(mts);
            this.scrollTabellaStatistiche.setViewportView(tabellaStatistiche);
        }
    }
Pensavo che andasse bene ma quando clicco il JButton associato all'azione mi da errore
"AWT-EventQueue-0" java.lang.NullPointerException
questo dipende perché giornata nel momento in cui io vorrei visualizzare la tabella ha valore nullo o almeno credo che sia per questo
Avevo pensato di risolvere aggiungendo al mio campionato una lista di incontri e poi ovviamente scrivere lo stesso metodo nella classe campionato.
La domanda è l'approccio giusto? Io ho il forte dubbio che non sia così.