【问题标题】:Iterate the values from the List and get oldest, newest dates迭代列表中的值并获取最旧、最新的日期
【发布时间】:2017-08-30 02:13:18
【问题描述】:

我正在开发 Spring 应用程序。我有一个LinkedHashMap<Integer, List<MyDTO>> 对象,在地图的值中(即List<MyDTO>)我有属性myDate 持有日期。我想迭代LinkedHashMap<Integer, List<MyDTO>> 并从List<MyDTO> myDate 属性中获取最早和最新的日期。

LinkedHashMap<Integer, List<MyDTO>> myResults =  myService.getResultData(myDTO);

 for (Map.Entry results : myResults.entrySet()) {
     List<MyDTO> myDTOList = (List<MyDTO>) results.getValue();

     //some business logic to process the list object, myDate property is in this myDTOList from which i need to get the oldest anad latest date.

}

以上是示例代码,我尝试迭代 Map(myResults) 并获取地图对象的值 List&lt;MyDTO&gt;。关于如何从存储在 List 对象 (myDTOList) 中的 myDate 属性中的日期中获取最旧和最新日期的任何建议?? ,

【问题讨论】:

  • 有什么难度?你不知道如何遍历列表?如何比较日期?
  • 您的 MyDTO 对象模型是什么?到现在为止,您尝试了哪些方法来获得最后一次和第一次约会?
  • @user7833845,您可以使用Date库的before和after进行比较,请查看下面的示例代码。
  • 你试过什么?您的代码中唯一的东西是一个无用的 for 循环,它什么都不做。

标签: java foreach iteration


【解决方案1】:

这是一个简单的 java 代码,用于获取最旧和最新的日期。还有很多其他方法可以实现这一点。

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

public class CompareDates {

    public static void main(String[] args){
        List<Date> dates = new ArrayList<Date>();
        Date date1 = new GregorianCalendar(2014, Calendar.FEBRUARY, 11).getTime();
        Date date2 = new GregorianCalendar(2015, Calendar.MARCH, 2).getTime();
        Date date3 = new GregorianCalendar(2016, Calendar.JANUARY, 4).getTime();
        Date date4 = new GregorianCalendar(2017, Calendar.MARCH, 17).getTime();
        Date date5 = new GregorianCalendar(2017, Calendar.FEBRUARY, 12).getTime();
        Date date6 = new GregorianCalendar(2017, Calendar.JULY, 14).getTime();

        dates.add(date1);
        dates.add(date2);
        dates.add(date3);
        dates.add(date4);
        dates.add(date5);
        dates.add(date6);

        Date minDate = dates.get(0);
        Date maxDate = dates.get(0);

        for(int i=1; i < dates.size(); i++){
            if(dates.get(i).before(minDate)){
                minDate = dates.get(i);
            }
            if(dates.get(i).after(maxDate)){
                maxDate = dates.get(i);
            }
        }

        System.out.println("Min date is ---"+minDate);
        System.out.println("Max date is ---"+maxDate);

    }
}

在您的代码中,您可以使用 Date API 的 beforeafter 以类似的方式进行比较。

LinkedHashMap<Integer, List<MyDTO>> myResults =  myService.getResultData(myDTO);

 for (Map.Entry results : myResults.entrySet()) {
     List<MyDTO> myDTOList = (List<MyDTO>) results.getValue();
        Date minDate, maxDate;
        for(int i=0; i < myDTOList.size(); i++){
            if(i == 0){
                 minDate = myDTOList.get(0).getMyDate();
                 maxDate = myDTOList.get(0).getMyDate();
            }
            if(myDTOList.get(i).before(minDate)){
                minDate = dates.get(i);
            }
            if(myDTOList.get(i).after(maxDate)){
                maxDate = dates.get(i);
            }
        }

        System.out.println("Min date is ---"+minDate);
        System.out.println("Max date is ---"+maxDate);

}

【讨论】:

    【解决方案2】:

    只要迭代List&lt;MyDTO&gt;,用maxmin这两个变量来记录最新日期和最旧日期,这很容易实现,所以我想你可以自己写代码。

    希望我没有误解你的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-13
      • 2011-09-14
      • 2021-12-15
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      相关资源
      最近更新 更多