Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]arraylist contenete oggetti diversi

    Ciao ho un problema con un metodo di un problema...in pratica devo costruire una classe Conferenza che contiene un “container" di oggetti di tipo Articoli; e deve disporre del seguente metodo:
    -public Articolo[] articoliDiUnAutore(Autore aut) restituisce gli articoli di un singolo autore

    codice:
    import java.util.*;
    class Conferenza{
        private String titolo;
        private int maxPagine,caratteriPerRiga,righePerPagina;
        private ArrayList<Articolo> articolo;
    Conferenza(){
        articolo=new ArrayList<Articolo>();
    }
    public void aggiungi(Articolo a){
        articolo.add(a);
    }
    //restituisce gli articoli di un singolo autore
    public Articolo [] articoliDiUnAutore(Autore aut){
      Articolo []a=new Articolo[articolo.size()];
        if(a.getAutore()==aut){
           return a;
        }else
    return null;
    }
    Articolo(coontine il nome dell'Autore) ed Autore sono due oggetti diversi;come faccio a verificare se aut è contenuto nell'arrayList?è sbgliato usare contains?

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    codice:
    public Articolo[] articoliDiUnAutore(Autore aut) {
        return articolo.stream().filter(a -> a.getAutore() == aut).toArray(Articolo[]::new);
    }
    Io farei così

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    Articolo(coontine il nome dell'Autore) ed Autore sono due oggetti diversi;come faccio a verificare se aut è contenuto nell'arrayList?è sbgliato usare contains?
    Innanzitutto il == è inappropriato, in quanto si basa sulla identità degli oggetti (uguaglianza dei reference) ... non sul loro contenuto. E comunque il articoliDiUnAutore, così come l'hai scritto, non ha praticamente senso (restituisce un Articolo[] di tot lunghezza fisica ma vuoto).

    E il contains non ti serve. In articoliDiUnAutore crea un nuovo ArrayList, poi per ciascun articolo della Conferenza verifica se l'Autore dell'articolo è quello cercato. Se la classe Autore ridefinisce correttamente equals(), allora usalo. Se corrisponde inserisci l'Articolo nel nuovo ArrayList. Alla fine, visto che serve un array, usa il toArray() (nota, non quello che restituisce Object[] ma l'altro!)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    ciao grazie per la risposte ho solo una domanda...perchè nelle classi devo implementare il metodo equals,mentre da main,per esempio uso direttamente il metodo?È una buona abitudine implemetarlo sempre nelle clasi?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    perchè nelle classi devo implementare il metodo equals
    Tutti gli oggetti hanno un equals(), perché è definito in origine da Object. Solo che in Object il equals() semplicemente usa == (compara cioè i reference) perché non "sa" fare altro. Se crei una tua classe, es. Persona, Libro ecc... allora ha senso ridefinire equals() per implementare correttamente il concetto di uguaglianza di contenuto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.