Odinare ArrayList per data

Discussione in 'Java' iniziata da Mariangela Di Luccia, 26 Dicembre 2015.

  1. Mariangela Di Luccia

    Mariangela Di Luccia Nuovo Utente

    Registrato:
    26 Dicembre 2015
    Messaggi:
    1
    Mi Piace Ricevuti:
    1
    Punteggio:
    0
    Buona Sera...
    Dovrei ordinare un ArrayList di oggetti Partita per data in ordine cronologico ma non risco a trovare un metodo per visualizzare tutte le partite in un nuovo ArrayList come posso fare..Grazie in anticipo
     
    A ottofonsuppost piace questo elemento.
  2. CRTVLB

    CRTVLB Nuovo Utente

    Registrato:
    8 Marzo 2016
    Messaggi:
    4
    Mi Piace Ricevuti:
    4
    Punteggio:
    0
    Sai dell'esistenza di comparable?
     
    A ottofonsuppost piace questo elemento.
  3. ottofonsuppost

    ottofonsuppost Utente Attivo

    Registrato:
    10 Maggio 2016
    Messaggi:
    170
    Mi Piace Ricevuti:
    13
    Punteggio:
    18
    Per manipolare le date, in passato si usava la classe DATE, che creava notevoli problemi e che per motivi di compatibilità con i vecchi programmi, esiste ancora nella classe JAVA.UTIL.
    Ora, nel pacchetto JAVA.UTIL abbiamo la classe CALENDAR, che è una classe astratta, e che è stata estesa con una sottoclasse chiamata GregorianCalendar, utile a rappresentare il calendario standard utilizzato nella maggior parte del mondo.
    Scrivendo ad inizio del programma la frase
    import java.util.*;

    importiamo tutti i metodi e le classi di quel pacchetto; ma se vogliamo possiamo importare solo le classi che ci servono, scrivendo
    import java.util.Calendar;
    import java.util.GregorianCalendar;

    La cosa curiosa della classe GregorianCalendar è che i mesi partono da ZERO e arrivano a 11; Gennaio è il mese ZERO. Per maggiore chiarezza esistono delle costanti, ma sono i nomi dei mesi in inglese; quindi per chi non conosce l’inglese, occorre creare delle istruzioni che convertono i numeri del mese in quelle costanti. Mese 4 = APRIL, MESE 12 = DECEMBER.
    Codice:
    
    import java.util.*;  public class OrdinareArrayPerData { public static void main(String[] args) {
      
                      //PRIMA PARTE - stampa la data del 25/12/2011
               
            GregorianCalendar data1 = new GregorianCalendar(2011,Calendar.DECEMBER,25);
          
        int giorno = data1.get(GregorianCalendar.DAY_OF_MONTH);
        int mese = data1.get(GregorianCalendar.MONTH)+1;
        int anno = data1.get(GregorianCalendar.YEAR);
             System.out.println("Data scelta "+giorno+"/"+(mese)+"/"+(anno));           }  }
    
    Poi vedremo gli ARRAY di DATE, per il momento, baci e abbracci, OTTOFONSUPPOST.
     
    Ultima modifica: 27 Maggio 2016
  4. ottofonsuppost

    ottofonsuppost Utente Attivo

    Registrato:
    10 Maggio 2016
    Messaggi:
    170
    Mi Piace Ricevuti:
    13
    Punteggio:
    18
    Molti in presenza delle date si affidano agli ARRAY e creano delle stringhe tipo "25/12/2016"; ma poi occorre prima confrontare l'anno, poi il mese, poi il giorno.
    Conviene, invece, faticare di meno e confrontare gli oggetti data utilizzando il metodo BEFORE.
    Aggiungete al listato precedente, e prima della parentesi graffa finale, queste altre righe di codice, e date il RUN.
    In queste ulteriori righe vediamo il BEFORE in azione.
    Codice:
    //confrontare due date 25/8/2016 e 14/8/2016
    
    GregorianCalendar primaData = new GregorianCalendar(2016,7,25);
    GregorianCalendar secondaData = new GregorianCalendar(2016,7,14);
    
    if (primaData.before(secondaData)){
        System.out.println("pD 25 sD 14; primaData viene prima ");}
    else{System.out.println("pd 25 sD 14 ; primaData viene dopo ");}
    
    
     
    Ultima modifica: 27 Maggio 2016
  5. ottofonsuppost

    ottofonsuppost Utente Attivo

    Registrato:
    10 Maggio 2016
    Messaggi:
    170
    Mi Piace Ricevuti:
    13
    Punteggio:
    18
    Esiste un altro metodo curioso per confrontare due date: farsi dare dalla classe GregorianCalendar i MILLISECONDI della data. Ogni volta che inseriamo una data, se ce la facciamo stampare, ci accorgeremo che ci viene fornita una risposta lunghissima, che contiene tanti dati che noi non abbiamo richiesto; uno si aspetta di vedere il 25/12/2016 ed invece ci arriva una pappardella che disorienta tutti.
    La cosa curiosa delle date trasformate in MILLISECONDI, è che riflettendoci, non tutti i giorni sono composti da 24 ore. Vi chiederete che razza di stupidaggine ho detto.
    Esiste l'ora solare e l'ora legale; quindi ogni anno vi sono due giorni particolari che accorciano e allungano la giornata espressa in millisecondi. Quindi attenzione a trasformare i millisecondi in data.
    Va da sè che più i giorni passano e più avremo millisecondi. Perciò ci basta fare la differenza tra i millisecondi forniti dalle date, per sapere quale data viene prima.
    Prima della parentesi graffa finale; aggiungete queste ulteriori righe di codice ai precedenti.
    Le pagine di internet sono piene di gente che diventa matta per capire come operare sulle date; ma leggendo questa risposta del grande OTTOFONSUPPOST vi siete risparmiati la perdita di tempo a capire come funzionano le date in JAVA. Potete ringraziarmi dandomi un semplice MI PIACE. Dare un mi piace non ci costa nulla; fa felice il prossimo, e migliora il Mondo.
    Baci e abbracci, OTTOFONSUPPOST.
    Codice:
    //confrontare due date 25/8/2016 e 14/8/2016
    //USANDO le date in MILLISECONDI MS
    
    long MSprimaData = primaData.getTimeInMillis();
    long MSsecondaData = secondaData.getTimeInMillis();
    
    System.out.println("pD 25/8/2016 in millis "+MSprimaData);
    System.out.println("sD 14/8/2016 in millis "+MSsecondaData);
    
     
    Ultima modifica: 27 Maggio 2016
  6. ottofonsuppost

    ottofonsuppost Utente Attivo

    Registrato:
    10 Maggio 2016
    Messaggi:
    170
    Mi Piace Ricevuti:
    13
    Punteggio:
    18
    OTTOFONSUPPOST RISOLVE IL PROBLEMA ORDINARE ARRAY LIST PER DATA

    Una volta capito il funzionamento delle date usando GregorianCalendar, rimane la parte più facile del programma. Eccovi le foto dei risultati: la stampa degli ARRAYLIST V, e Z, ed infine ARRAYLIST z in ordine di data.
    Baci e abbracci ordinati, OTTOFONSUPPOST.

    Eccovi le date ordinate 11 - 14 - 25 - 28
    ARRAYLISTORDINATO.png

    Ed ecco il codice usato per risolvere il problema
    Codice:
    
    package javaapplication18;                         import java.util.*;
    public class JavaApplication18 {     public static void main(String[] args) {
       
                      // ABBIAMO 4 DATE DI CALENDARIO  
    GregorianCalendar primaData = new GregorianCalendar(2016,7,25);
    GregorianCalendar secondaData = new GregorianCalendar(2016,7,14);
    GregorianCalendar terzaData = new GregorianCalendar(2016,7,28);
    GregorianCalendar quartaData = new GregorianCalendar(2016,7,11);  
       
                      //CREIAMO ARRAYLIST V VUOTO E LO RIEMPIAMO DI 4 DATE   
        ArrayList v = new ArrayList ();      System.out.println("n.elementi di v: "+v.size());
    v.add(primaData); v.add(secondaData); v.add(terzaData); v.add(quartaData);
    
    System.out.println("n. elementi di v: "+v.size());
    for (int i=0; i<v.size(); i++){   System.out.println("elementov "+ i+": "+v.get(i));}
    System.out.println(" ");
    
                        //creo ARRAYLIST Z E FACCIO LA COPIA DI V
      ArrayList z = new ArrayList ();
       boolean addAll = z.addAll(v);             System.out.println("n. elementi di z: "+z.size());
        for (int x=0; x<z.size(); x++){        System.out.println("elementoz "+ x+": "+z.get(x));}
    
                                  // ordino l'ARRAYLIST Z
        Collections.sort(z);                          System.out.println("n. elementi di z: "+z.size());
        for (int x=0; x<z.size(); x++){       System.out.println("elementoz "+ x+": "+z.get(x));} } }
    
    
     
    Ultima modifica: 27 Maggio 2016
Sto caricando...
Discussioni simili - Odinare ArrayList
  1. Androidino
    Risposte:
    1
    Visite:
    698
  2. antonio.amazza
    Risposte:
    2
    Visite:
    1.084
  3. entangled
    Risposte:
    1
    Visite:
    1.348

Condividi questa Pagina