在ArrayList Java中查找元素

时间:2015-12-14 08:47:52

标签: java arraylist collections

我无法找到元素,这是我的代码:

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

3 个答案:

答案 0 :(得分:2)

猜测getEndTime()返回一个LocalDateTime,你不能将一个字符串与一个LocalDateTime类型进行比较。您可以尝试将LocalDateTime解析为LocalDate并填写&#39; findThis&#39;具有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());

    }
}

答案 1 :(得分:0)

您需要为该null提供Comparator,或者Monitoring应该实现可比较的(两者都应该按照您需要的时间字段比较项目)。

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

答案 2 :(得分: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());
    }
}

甚至更好:当您从CSV中读取对象时,不要将开始和结束时间存储为字符串,而是将它们转换为Date个对象或类似对象。