2015-12-14 15 views
6

tôi có khó khăn khi tìm các yếu tố, đây là mã của tôi:Tìm phần tử trong 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()); 

Đây là phần tôi gặp khó khăn với, tôi không biết làm thế nào để tìm kiếm en lấy lại đối tượng với EndTime 2015-03-10. BTW đây là một dòng dữ liệu 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()); 

      } 
    } 

tôi đã cố gắng này, nhưng cả hai đã không làm việc:

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

Liệu 'getEndTime' cũng mang lại một chuỗi? – npinti

+0

x.getEndTime() trả về cái gì? Nó có quay trở lại, chỉ là ngày hoặc cùng với thời gian như '2015-03-10 7:13:20'? Nếu nó trả về cùng với thời gian, thì điều kiện 'if (x.getEndTime(). Bằng (findThis)) {' sẽ không vượt qua. – Parasu

+0

Bạn có thể vui lòng hiển thị mã cho 'EndTimeComparator'? – Parasu

Trả lời

2

Đoán rằng getEndTime() trả về một LocalDateTime bạn không thể so sánh một chuỗi với một kiểu LocalDateTime. Bạn có thể thử phân tích cú pháp LocalDateTime thành LocalDate và điền vào variabel 'findThis' với một kiểu LocalDate.

Bởi vì đang cho biết hơn một năm 1000 từ:

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

Cảm ơn bạn, điều này đã làm việc hoàn hảo. Với điều này tôi có thể điều chỉnh chỉ ngày và nó sẽ cho tôi đối tượng của ngày nhất định. – H35am

0

bạn cần cung cấp Comparator for null đó hoặc Monitoring nên thực hiện so sánh (cả trong số họ nên so sánh các mục bằng cách lĩnh vực thời gian mà bạn nhu cầu).

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

Theo ví dụ dữ liệu mà bạn cung cấp

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", không "2015-03-10", vì vậy sử dụng equals sẽ không hoạt động. Thay vào đó, bạn có thể thử sử dụng 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()); 
    } 
} 

Hoặc thậm chí tốt hơn: Thay vì lưu trữ bắt đầu và kết thúc lần chuỗi, chuyển đổi chúng sang Date đối tượng hoặc tương tự khi bạn đọc các đối tượng từ CSV.

Các vấn đề liên quan