Odinare ArrayList per data

Mariangela Di Luccia

Nuovo Utente
26 Dic 2015
1
1
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
 
  • Like
Reactions: ottofonsuppost
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:
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:
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:
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:

Discussioni simili