Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797

    [JAVA] Unire ordinatamanete 2 arraylist (o ordinare un arraylist)

    Salve
    problema, non riesco ad uscirne.
    Praticamente ho un arraylist di bean. Questi bean sono composti da
    - testo domanda
    - testo risposta
    - numero_risposte

    ora, ho 2 query, una produce questo risultato (al posto dei numeri c'è il testo, ma nn è quello il problema):
    codice:
    dom     rispo        nume
    ----  - -----        ----- 
    1           0            1     
    1           1            2   
    1           2            1     
    2           7            1      
    2           8            1
    un altra:
    codice:
    dom    risp 
    ---      ----
    1           1           
    1           2           
    1           3           
    1           4           
    1           5           
    2           6           
    2           7           
    2           8           
    2           9           
    2           10
    il tutto mi serve in un arraylist per poi passarlo al jasperreport che stampa.
    ora se prima aggiungo una query cin .add e poi l'altra, in output non mi stampa una cosa come dovrebbe essere , cioè:

    codice:
    doma   rispo       count
    -----    ----    ---------
    1           0            1 
    1           1            2   
    1           2            1 
    1           3           
    1           4           
    1           5           
    2           6           
    2           7            1
    2           8            1
    2           9           
    2           10
    ma semplicemente prima una query e poi l'altra.
    c'è un modo di poter inserire le due liste ordinate?
    praticamente, pirma inserisco una delle 2 query, poi l'altra inserisce i nuovi bean ordinati per domanda.
    es:
    ho
    codice:
    dom     rispo        nume
    ----  - -----        ----- 
    1           0            1     
    1           1            2    
    1           2            1     
    2           7            1      
    2           8            1
    inserisco
    1 3
    diventi
    codice:
    dom     rispo        nume
    ----  - -----        ----- 
    1           0            1     
    1           1            2  
    1           2            1  
    1           3       
    2           7            1      
    2           8            1
    (basta ordinato per domanda, se anche per risposta meglio, ma basta domanda)

    dato che dalle query estraggo 2 arrayList, mi sa che mi conviene mettere tutto in uno e poi ordinarlo, o fare in modo che il metodo add(collection c) me le inserisca ordinate.
    qualcuno sa come posso fare?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Non sono stato a leggere con attenzione tutte le tabelle che hai riportato, perché comunque non mi è chiaro cosa hai fatto a livello di codice. Ti spiego piuttosto il concetto che sta alla base dell'ordinamento, poi vedrai tu.
    Per ordinare un ArrayList (e parlando più in generale, un "List"), si usa il metodo sort() della classe utility Collections (s finale, non Collection l'interfaccia).
    Ci sono sostanzialmente due possibilità: o usi la versione di sort() che prende solo un List e in tal caso gli elementi contenuti devono implementare Comparable oppure usi la versione di sort() che prende anche un Comparator.
    A te la scelta.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    Originariamente inviato da andbin
    Non sono stato a leggere con attenzione tutte le tabelle che hai riportato, perché comunque non mi è chiaro cosa hai fatto a livello di codice. Ti spiego piuttosto il concetto che sta alla base dell'ordinamento, poi vedrai tu.
    Per ordinare un ArrayList (e parlando più in generale, un "List"), si usa il metodo sort() della classe utility Collections (s finale, non Collection l'interfaccia).
    Ci sono sostanzialmente due possibilità: o usi la versione di sort() che prende solo un List e in tal caso gli elementi contenuti devono implementare Comparable oppure usi la versione di sort() che prende anche un Comparator.
    A te la scelta.
    si ma essendo un arraylist di oggetti (una classe con 3 campi) come faccio ad ordinarli?
    c'è un esempio da qualche parte?
    grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bako
    si ma essendo un arraylist di oggetti (una classe con 3 campi) come faccio ad ordinarli?
    Implementando l'interfaccia Comparable nella classe dell'oggetto oppure definendo una classe a parte che implementa Comparator.

    Originariamente inviato da bako
    c'è un esempio da qualche parte?
    Un esempio l'avevo fatto in questa discussione, però nota che avevo usato i "generics".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    ora ho un problema un pò diverso.
    cioè, devo inserire solo gli elementi che nn sono già presenti nell'array.
    es.
    mettiamo che ho A=[{ciao,5}, {miao,3}, {bau,2}]
    ora ho B=[{ciao,0}, {mamma,6}]

    dove {nome,valore} è una classe con 2 campi

    se faccio A.addAll(B) mi risulti [{ciao,5}, {miao,3}, {bau,2},{mamma,6}]

    come posso fare?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bako
    ora ho un problema un pò diverso.
    cioè, devo inserire solo gli elementi che nn sono già presenti nell'array.
    es.
    mettiamo che ho A=[{ciao,5}, {miao,3}, {bau,2}]
    ora ho B=[{ciao,0}, {mamma,6}]

    dove {nome,valore} è una classe con 2 campi

    se faccio A.addAll(B) mi risulti [{ciao,5}, {miao,3}, {bau,2},{mamma,6}]
    La questione però è che vuoi che la esclusione sia basata solo su un determinato campo dell'oggetto, non sull'oggetto stesso. In pratica {ciao,5} è un oggetto diverso da {ciao,0}.

    Dovresti fare una ricerca lineare nella lista per vedere se il campo esiste già ma questa è una operazione che richiede tempo (proporzionale alla dimensione della lista).
    Ti consiglierei di tenere anche un 'set' (es. HashSet) in cui memorizzi i dati di quel campo specifico. Prima di aggiungere alla lista, verifichi se il campo c'è nel set.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    ma per il contains?? c'è il metodo, posso rifarlo? se implemento il compare funzia?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bako
    ma per il contains?? c'è il metodo, posso rifarlo? se implemento il compare funzia?
    Le List hanno il metodo contains() ma innanzitutto la ricerca è lineare e comunque va a cercare un oggetto uguale basandosi su equals(). Tu invece vuoi testare solo un campo dell'oggetto, non che l'intero oggetto sia di contenuto uguale.

    Per dirla in altri termini, se la lista contiene {ciao,5} tu vuoi evitare l'inserimento di {ciao,0}, {ciao,1} ecc...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it L'avatar di bako
    Registrato dal
    Feb 2004
    Messaggi
    1,797
    Originariamente inviato da andbin
    Le List hanno il metodo contains() ma innanzitutto la ricerca è lineare e comunque va a cercare un oggetto uguale basandosi su equals(). Tu invece vuoi testare solo un campo dell'oggetto, non che l'intero oggetto sia di contenuto uguale.

    Per dirla in altri termini, se la lista contiene {ciao,5} tu vuoi evitare l'inserimento di {ciao,0}, {ciao,1} ecc...
    sì esatto, di qualsiasi altro oggetto con il nome "ciao".
    dopo provo allora.

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.