【问题标题】:Traversing though a list of objects in java遍历java中的对象列表
【发布时间】:2019-09-25 15:54:12
【问题描述】:

首先,我对 Java 很陌生,所以如果我的问题不完整,请见谅。我确实经历了一些关于 SO 的线程,即使有一些接近的线程,我也不理解它们或无法根据我的需要修改它们。所以这是一个问题,下面是我从回购中获得的对象列表。

[ { "esId": 3, "exam": { "examId": 1, "name": "Final Exam", "startDate": "2019-04-15", "endDate": "2019-04-24", "resultReleaseDate": "2019-04-30 07:00:00" } }, { "esId": 44, "exam": { "examId": 15, "name": "Mid Term II", "startDate": "2019-09-20", "endDate": "2019-09-25", "resultReleaseDate": "2019-09-25 18:32:02" }, "essList": [ { "esdId": 74, "subject": { "subjectId": 1, "name": "Math" }, "exDate": "2019-09-20", "startTime": "19:03", "maxMarks": 10, "endTime": "19:03" }, { "esdId": 77, "subject": { "subjectId": 2, "name": "Science" }, "exDate": "2019-09-21", "startTime": "19:03", "maxMarks": 10, "endTime": "19:03" }, { "esdId": 79, "subject": { "subjectId": 3, "name": "English" }, "exDate": "2019-09-20", "startTime": "19:04", "maxMarks": 10, "endTime": "19:04" } ] } ] 从上面的列表中,我想返回endDate 大于nowtoday 的第一个对象

我尝试了以下方式

ArrayList<ExamStandard> examList = new ArrayList<ExamStandard>();
LocalDate today = LocalDate.now();
        String date = today.toString();
        for(int i = 0; i < examList.size(); i++)
        {
            if(examList.get(i).equals(exam) == date){

            }
        }

这开始引发转换类型错误。不知道该怎么做,如果有人可以帮助我并解释我该怎么做以及发生了什么,那将非常有帮助。

感谢任何帮助,谢谢 维克拉姆

【问题讨论】:

  • equals 返回布尔值,您正在尝试将其与字符串进行比较。没有意义
  • 您希望if(examList.get(i).equals(exam) == date) 行做什么? equals 返回 boolean,然后您将其与 String 进行比较。这根本没有意义。
  • 您应该在您的ExamStandard class 中创建一个Comparator 来比较两个日期并使用compareTo 来查找您需要的内容

标签: java arrays list spring-boot loops


【解决方案1】:

假设您访问了您的exDate,它是字符串格式的。

首先,请执行以下操作

String sDate1="31/12/1998";  
    Date date1=new SimpleDateFormat("dd/MM/yyyy").parse(sDate1);  
    System.out.println(sDate1+"\t"+date1); 

date1 现在是日期格式

稍后,您可以使用如下所述的预定义日期方法

          if(date1.after(date2)){
                System.out.println("Date1 is after Date2");
            }
            // before() will return true if and only if date1 is before date2
            if(date1.before(date2)){
                System.out.println("Date1 is before Date2");
            }

            //equals() returns true if both the dates are equal
            if(date1.equals(date2)){
                System.out.println("Date1 is equal Date2");
            }

其中 date2 可能是您当前的日期或您想提供的任何日期。

要返回您需要的内容,请执行此操作

ExamList exam = new ExamList();
SimpleDateFormat sd=new SimpleDateFormat("dd/MM/yyyy");  
int i = 0;
foreach(ExamList ex : examList){
  if(sd.parse(ex.getExDate()).after(date)){
    exam = ex;
    }
    i++;
}

试试吧。

如果需要一些调整,请告诉我,我可以使用电脑而不是手机。

注意:您可能需要添加必要的空值检查。

【讨论】:

  • 感谢库纳尔的回答,但可能是我的帖子不够清楚。事情就是这样。我得到了上述列表的响应,我想知道如何遍历该列表并在列表中搜索与对象列表的“endDate”匹配的日期,它应该返回该对象。
  • 是的,这就是你要走的路。 i)循环到您拥有的数据列表 ii)进行日期比较 iii)无论条件为真,您都返回列表的那部分,即该列表中的单个对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 2021-11-21
相关资源
最近更新 更多