有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何筛选日期列表?

我有一个以这种形式存储日期对象的列表:

Mon Jan 30 18:00:00 GMT+00:00 2017
Mon Jan 30 21:00:00 GMT+00:00 2017
Tue Jan 31 00:00:00 GMT+00:00 2017
Tue Jan 31 03:00:00 GMT+00:00 2017
Tue Jan 31 06:00:00 GMT+00:00 2017

我需要一种方法来过滤我的列表,只保留每天的最后日期

这是我的代码的当前状态:

for(int i = 0; i< timeDate.size(); i++){

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(timeDate.get(i));

        int day = calendar.get(Calendar.DAY_OF_MONTH);
        int month = calendar.get(Calendar.MONTH);
        int hour = calendar.get(Calendar.HOUR);

        for(int j=i; j<timeDate.size(); j++){
            Date currentDate = timeDate.get(j);
            calendar.setTime(currentDate);

            int dayC = calendar.get(Calendar.DAY_OF_MONTH);
            int monthC = calendar.get(Calendar.MONTH);
            int hourC = calendar.get(Calendar.HOUR);

            if(day==dayC && month==monthC && hourC > hour){
                timeDate.remove(i);
            }
        }
    }

共 (1) 个答案

  1. # 1 楼答案

    给你:

    public static void main(String[] args){
        List<String> list = new ArrayList<>();
        SimpleDateFormat dateFomat = new SimpleDateFormat("E MMM dd hh:mm:ss z yyyy");
        SimpleDateFormat yyyyMMddFormat = new SimpleDateFormat("yyyyMMdd"); 
        list.add("Mon Jan 30 18:00:00 GMT+00:00 2017");
        list.add("Mon Jan 30 21:00:00 GMT+00:00 2017");
        list.add("Tue Jan 31 00:00:00 GMT+00:00 2017");
        list.add("Tue Jan 31 03:00:00 GMT+00:00 2017");
        list.add("Tue Jan 31 06:00:00 GMT+00:00 2017");
    
        Map<String, List<Date>> dateMap = list.stream()
        .map(s -> {
            try {
                return dateFomat.parse(s);
            } catch (ParseException e) {
                throw new RuntimeException(e);
            }
        })
        .collect(Collectors.groupingBy(s -> yyyyMMddFormat.format(s), Collectors.toList()));
    
        List<Date> lastDates = new ArrayList<>();
        for(Map.Entry<String, List<Date>> entry : dateMap.entrySet()){
            lastDates.add(Collections.max(entry.getValue()));
        }
    
        System.out.println(lastDates);
    }