2015-12-14 4 views
6

ho problemi a trovare elementi, qui è il mio codice:Trova elemento ArrayList Java

public static void main(String[] args) { 
    BufferedReader br = getFileReader("reader.csv"); 

    ArrayList<Monitoring> col = getCollection(br); 

    //sort the collection on 'beginTime' 
    for (Monitoring x : col) 
     System.out.println(x.toString()); 
    BeginTimeComparator beginTime = new BeginTimeComparator(); 
    Collections.sort(col,beginTime); 
    System.out.println("Begin time:"); 
    for (Monitoring x : col) 
     System.out.println(x.toString()); 

questa è la parte che ho problemi con, non so come cercare en tornare l'oggetto con endTime 2015/03/10. BTW questa è una riga di dati cvs:

UnitId;BeginTime;EndTime;Type;Min;Max;Sum 

14100072; 2015/3/10 07: 12: 20; 2015-03-10 7: 13: 20; GPS/GpsAccuracyGyroBias; 0; 0; 0

//find the amount of elements that were sent on 'endTime' = 2015-03-10 (just the date) 
    EndTimeComparator endTime = new EndTimeComparator(); 
    String findThis = "2015-03-10"; 
    Collections.sort(col, endTime); 

    for(Monitoring x : col){ 
      if(x.getEndTime().equals(findThis)){ 
       System.out.println("Here is 'endTime= 2015-03-10' :"); 
       System.out.println(x.toString()); 

      } 
    } 

ho provato questo, ma entrambi non ha funzionato:

int index = Collections.binarySearch(col, findThis.toString(), null); 
System.out.println("Here is 'endTime= 2015-03-10' :"); 
System.out.println(index); 
+1

Vuol 'getEndTime' anche la resa di nuovo una stringa? – npinti

+0

cosa restituisce x.getEndTime()? Ritorna, solo la data o insieme al tempo come '2015-03-10 7:13:20'? Se ritorna con il tempo, allora la condizione 'if (x.getEndTime(). Equals (findThis)) {' non passerà. – Parasu

+0

Puoi mostrare il codice per 'EndTimeComparator'? – Parasu

risposta

2

Supponendo che getEndTime() restituisca un LocalDateTime non è possibile confrontare una stringa con un tipo di LocalDateTime. Potresti provare ad analizzare LocalDateTime in LocalDate e riempire il variabile "findThis" con un tipo di LocalDate.

Poiché il codice dice più di 1000 parole:

EndTimeComparator endTime = new EndTimeComparator(); 
Collections.sort(col, endTime); 

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd"); 
LocalDate findThis = LocalDate.parse("2015-03-10", dtf); 

System.out.println("Here is 'endTime= 2015-03-10' :"); 
for (Monitoring x : col) { 
    if (x.getEndTime().toLocalDate().equals(findThis)) { 

     System.out.println(x.toString()); 

    } 
} 
+0

Grazie, ha funzionato perfettamente. Con questo posso regolare solo la data e mi darà oggetti di data determinata. – H35am

0

è necessario fornire comparatore controllo che nulla o Monitoring dovrebbero attuare paragonabili (ciascuno di essi dovrebbe confrontare gli elementi di campo volta che si bisogno).

Collections.binarySearch(col, findThis.toString(), null); 
0

Secondo i dati di esempio che hai fornito

UnitId;BeginTime;EndTime;Type;Min;Max;Sum 
14100072;2015-03-10 07:12:20;2015-03-10 7:13:20;Gps/GpsAccuracyGyroBias;0;0;0 

endTime è "2015-03-10 7:13:20", non "2015-03-10", in modo da utilizzare equals non funzionerà. Invece, si potrebbe provare a utilizzare startsWith:

String findThis = "2015-03-10"; 
for (Monitoring x : col) { 
    if (x.getEndTime().startsWith(findThis)) { 
     System.out.println("Here is 'endTime= 2015-03-10': "); 
     System.out.println(x.toString()); 
    } 
} 

O ancora meglio: Invece di memorizzare i tempi di inizio e il termine stringhe, convertirli in Date oggetti o simili quando si leggono gli oggetti da CSV.