2015-12-14 5 views
6

У меня есть проблемы с поиском элементов, вот мой код:Найти элемент в 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()); 

Это часть у меня есть проблемы с, я не знаю, как искать ан вернуть объект с EndTime 2015-03-10. Кстати это одна строка данных CVS:

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

//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()); 

      } 
    } 

Я попытался это, но и не получилось:

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

ли 'getEndTime' также дают назад строку? – npinti

+0

Что делает x.getEndTime() return? Он возвращается, только дата или вместе со временем вроде «2015-03-10 7:13:20»? Если он возвращается вместе со временем, тогда условие 'if (x.getEndTime(). Equals (findThis)) {' не пройдет. – Parasu

+0

Не могли бы вы показать код для 'EndTimeComparator'? – Parasu

ответ

2

Угадав, что getEndTime() возвращает значение LocalDateTime, вы не можете сравнивать строку с типом LocalDateTime. Вы можете попытаться разобрать LocalDateTime на LocalDate и заполнить переменную findThis с помощью типа LocalDate.

Поскольку код говорит больше, чем 1000 слов:

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

Спасибо, это сработало отлично. При этом я могу настроить только дату, и она даст мне объекты заданной даты. – H35am

0

Вы должны предоставить компаратор для этого нуль или Monitoring должны осуществлять сопоставимыми (оба из них должны сравнивать по времени поле, которое вам необходимость).

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

Согласно данным примера вы предоставили

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", не "2015-03-10", поэтому использование equals не будет работать. Вместо этого, вы можете попробовать использовать 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()); 
    } 
} 

Или еще лучше: вместо того, чтобы хранить время начала и конца, как струны, преобразовать их в Date объекты или аналогичные, когда вы читаете объекты из CSV.

Смежные вопросы