【问题标题】:Use loops to count number of records per day in Java在 Java 中使用循环计算每天的记录数
【发布时间】:2018-08-24 01:54:37
【问题描述】:

有点菜鸟问题,但是为这种情况构建循环的最佳方法是什么? Suppose I have this table. 我想计算每天创建的记录数,并将每个不同的日期及其记录数存储在数组列表中。如果某个日期中没有任何记录(例如 8/25),则该日期仍应以 0 计数存储。

数据是从 Realm 表中提取的,因此 SQL 查询不起作用。

ArrayList<Date> days = new ArrayList<Date>();
                ArrayList<Integer> recordsPerDay = new ArrayList<Integer>();
                int count = 0;

                for(countresults = 0; countresults <= results.size(); countresults++){
                    if(tblProposalCorporate.getDateCreated()!=lastWeek)
                    {
                        days.add(tblProposalCorporate.getDateCreated());
                        count = 0;
                    }
                    if (tblProposalCorporate.getDateCreated()==lastWeek)
                    {
                        days.add(tblProposalCorporate.getDateCreated());
                        count+=1;
                    }
                }

【问题讨论】:

  • 对不起!这些都存储在 Realm 表中。
  • 请将此信息添加到您的问题中,并添加相应的标签,以便其他人可以帮助您。

标签: java android loops arraylist realm


【解决方案1】:

其实很简单,只需要从 Realm 获取最小和最大日期:

Date minimumDate = realm.where(Proposal.class).mininumDate("dateCreated");
Date maximumDate = realm.where(Proposal.class).maximumDate("dateCreated");

然后您可以将这些日期设置为零时、分、秒和毫秒:

Calendar calendar = Calendar.getInstance();
calendar.setTime(minimumDate);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
minimumDate = calendar.getTime();

calendar.setTime(maximumDate);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
maximumDate = calendar.getTime();

现在您需要做的就是迭代日期并执行查询以获取数据计数

Map<Date, Long> counts = new LinkedHashMap<>();
for(Date iterDate = new Date(minimumDate); iterDate.getTime() <= maximumDate.getTime(); ) {
    calendar.setTime(iterDate);
    calendar.add(Calendar.DAY_OF_MONTH, 1);
    Date nextDay = calendar.getTime();

    counts.put(iterDate, realm.where(Proposal.class).greaterThanOrEqualTo("dateCreated", iterDate).lowerThan("dateCreated", nextDay).count());

    iterDay.setTime(nextDay.getTime());
}

【讨论】:

    猜你喜欢
    • 2012-03-03
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2016-10-17
    • 1970-01-01
    相关资源
    最近更新 更多