2015-12-14 22 views
6

mam problem ze znalezieniem elementów, tutaj jest mój kod:Znajdź element 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()); 

Jest to część mam problemy z, nie wiem jak szukać pl odzyskać obiekt z EndTime 2015-03-10. okazji jest jedna linia danych CVS:

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

14100072; 10.03.2015 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()); 

      } 
    } 

próbowałem tego, ale oba nie działają:

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

Czy 'getEndTime' również dają z powrotem ciąg? – npinti

+0

co zwróci x.getEndTime()? Czy powraca, tylko data lub wraz z czasem takim jak "2015-03-10 7:13:20"? Jeśli powróci wraz z czasem, wówczas warunek 'if (x.getEndTime(). Equals (findThis)) {' nie przejdzie. – Parasu

+0

Czy możesz pokazać kod 'EndTimeComparator'? – Parasu

Odpowiedz

2

Zgadywanie, że getEndTime() zwraca wartość LocalDateTime, której nie można porównać z typem LocalDateTime. Możesz spróbować sparsować LocalDateTime do LocalDate i wypełnić zmienną 'findThis' typem LocalDate.

Ponieważ kod mówi więcej niż 1000 słów:

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

Dziękuję, to się udało. Dzięki temu mogę dostosować tylko datę i da mi obiekty danej daty. – H35am

0

Musisz podać Komparator do tego null lub Monitoring powinny wdrożyć porównywalne (obaj powinni porównać elementy według dziedzinie czasu, który potrzeba).

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

według przykładu danych podałeś

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 jest "2015-03-10 7:13:20", nie "2015-03-10", więc korzystanie equals nie będzie działać. Zamiast tego, można spróbować użyć 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()); 
    } 
} 

albo jeszcze lepiej: Zamiast przechowywania początek i koniec razy jako łańcuchy, konwertować je do Date obiektami lub podobny kiedy czytasz obiektów z pliku CSV.