加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 按开始和结束时间过滤带有日期的ArrayList

发布时间:2020-12-15 04:22:43 所属栏目:Java 来源:网络整理
导读:我正在实现一个简单的ListView,其中数据源是一个ArrayList,其中包含Name,Start和End日期.在iOS中,我会使用一个简单的NSPredicate来过滤数组,但在 Android和Java中,我对我应该使用的内容感到困惑.欢迎任何建议. 解决方法 您可以使用Date.before和Date.after方
我正在实现一个简单的ListView,其中数据源是一个ArrayList,其中包含Name,Start和End日期.在iOS中,我会使用一个简单的NSPredicate来过滤数组,但在 Android和Java中,我对我应该使用的内容感到困惑.欢迎任何建议.

解决方法

您可以使用Date.before和Date.after方法.这些允许您过滤日期列表(对于特定范围(例如1月)的日期):

一个.使用带有开始和结束日期的Java 8过滤器.

湾使用Java循环/迭代器来检查开始和结束日期.

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.stream.Collectors;

public class FilterStartAndEndDate {

    private SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    private Collection<Date> dateList = null;
    private Date start = null;
    private Date end = null;

    private FilterStartAndEndDate() throws ParseException {
        dateList = new ArrayList<Date>() {{
            add(sdf.parse("01/01/2016"));
            add(sdf.parse("02/01/2016"));
            add(sdf.parse("03/02/2016"));
            add(sdf.parse("04/01/2016"));
            add(sdf.parse("05/01/2016"));
        }};

        start = sdf.parse("31/12/2015");
        end = sdf.parse("01/02/2016");
    }

    /**
     * Filter dates with Lambda
     *
     * @throws ParseException
     */
    private void getDatesBetweenStartAndFinishWithFilter() throws ParseException {
        dateList.stream()
                .filter(dates -> dates.after(start) && dates.before(end))
                .collect(Collectors.toList())
                .forEach(januaryDate->System.out.println(januaryDate));
    }

    /**
     * Filter dates with Iterator
     *
     * @throws ParseException
     */
    private void getDatesBetweenStartAndFinish() throws ParseException {
        Collection<Date> datesInJanuaryList = new ArrayList<>();

        for (Date eachDate : dateList) {
            if (eachDate.after(start) && eachDate.before(end)) {
                datesInJanuaryList.add(eachDate);
            }
        }

        for (Date eachDate : datesInJanuaryList) {
            System.out.println(eachDate);
        }
    }


    public static void main(String[] args) throws Exception {
        FilterStartAndEndDate datesInJanuary = new FilterStartAndEndDate();
        datesInJanuary.getDatesBetweenStartAndFinish();
        datesInJanuary.getDatesBetweenStartAndFinishWithFilter();
    }
}

示例代码过滤器的日期是1月份,使用Lambda过滤器和Java迭代器.两者都使用方法之前和之后的Date.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读