Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Utilizzo metodo values() di Collection

    Salve a tutti.

    E' lecito operare nel modo seguente per creare una lista dall'insieme dei valori di una MAP?
    codice:
     
    public
    List<Libro> getListaLibri(){//domanda 3a;
    List<Libro> listaLibri =
    new LinkedList<Libro>();if((this.codice2libro.values()) instanceof List<?>)listaLibri = (List<Libro>)this.codice2libro.values();
    return listaLibri;

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da adrenalinico Visualizza il messaggio
    E' lecito operare nel modo seguente per creare una lista dall'insieme dei valori di una MAP?
    No ... non proprio. Il punto è che values() di Map ha come tipo di ritorno un Collection<V>. E non è affatto detto che la collezione restituita sia una implementazione di List! Ad esempio HashMap ha come values una collezione che estende AbstractCollection. Che non è un List!

    Se vuoi fare la cosa in modo davvero "pulito" e sicuro devi semplicemente popolare il tuo nuovo LinkedList con la collezione fornita da values(). E non c'è bisogno di fare cicli o invocare metodi .... basta il costruttore di LinkedList:

    codice:
    new LinkedList<Libro>(this.codice2libro.values())

    (ovviamente inseriscilo nel tuo metodo.


    P.S. non postare il codice colorato ... complica solo il quoting del messaggio.
    Ultima modifica di andbin; 01-04-2014 a 14:09
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    "Stranamente" ho capito quasi tutto!
    ...di solito sono più lento! In effetti passo come parametro la collezione al costruttore di una nuova lista ed il gioco è fatto! Simply is better! Il mio ragionamento era: se value() restituisce una collection e list estende collection posso fare il cast. Questo ancora non mi è perfettamente chiaro.
    Un'ultima cosa. Io per inserire il codice faccio copia incolla da eclipse...per evitare questo orrore che risuta come posso fare???

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da adrenalinico Visualizza il messaggio
    Il mio ragionamento era: se value() restituisce una collection e list estende collection posso fare il cast. Questo ancora non mi è perfettamente chiaro.
    La interfaccia List estende la interfaccia Collection, quindi è corretto dire che: List è-un Collection. Ma non tutte le implementazioni di Collection sono dei List!
    Te lo rispiego semplicemente con altri tipi più semplici: String è-un Object. Ma se tu hai una variabile di tipo Object non è detto che ciò che viene assegnato sia un String .... potrebbe essere un Integer o qualunque altra cosa.

    Quote Originariamente inviata da adrenalinico Visualizza il messaggio
    Io per inserire il codice faccio copia incolla da eclipse...per evitare questo orrore che risuta come posso fare???
    Copialo prima in un editor di testo "puro", blocco note, Notepad++ o simili. Così "perde" qualunque stile. E poi ri-copia da lì e incolla qui sul forum.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Quote Originariamente inviata da andbin Visualizza il messaggio
    La interfaccia List estende la interfaccia Collection, quindi è corretto dire che: List è-un Collection. Ma non tutte le implementazioni di Collection sono dei List!
    Ok, adesso ci dovrei essere.
    In definitiva la sintassi non è scorretta, se ho conoscenza della struttura della collection potrei anche operare il cast. Nel caso specifico non mi trovo in queste circostanze (anzi, sono sicuro che non è un list...) e quindi è improprio.
    Grazie mille, piccole delucidazioni ma infinitamente utili per chiarire tanti meccanismi!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da adrenalinico Visualizza il messaggio
    se ho conoscenza della struttura della collection potrei anche operare il cast. Nel caso specifico non mi trovo in queste circostanze (anzi, sono sicuro che non è un list...) e quindi è improprio.
    Perlomeno per HashMap/TreeMap/LinkedHashMap (non ho guardato in altre implementazioni di Map) il values() fornisce una collezione che estende AbstractCollection e quindi è certamente un Collection ma non è un List. Quindi per queste map un cast a List del values() fallirebbe sempre.
    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.