Java - 如何过滤日期列表?

标签 java collections java-8

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

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

最佳答案

给你:

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

关于Java - 如何过滤日期列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42666335/

相关文章:

java - 什么是类的客户

java - 如何获取电子邮件 ID、显示名称和电话号码

asynchronous - 当我在 lambda 函数中启动一个新线程并返回时会发生什么

Java - 条件始终为真/假(Android 复选框)

java - 如何在 JSP 页面中检索并显示数据库中的图像?

collections - 在 NUnit 中断言集合与预期集合的顺序相同

java - 安全转换为 HashMap

java : TreeSet Collection and Comparable interface

java - 在java 8中从父级排序子级列表

java - 使用 java 流将包含标题和行的 csv 文件转换为 hashmap 数组