gpt4 book ai didi

java - 转换 Java 7 的 IntStream 过滤器函数

转载 作者:行者123 更新时间:2023-12-01 17:45:39 24 4
gpt4 key购买 nike

背景:我的应用程序不允许我引入外部库,尽管有些库可以访问。我正在 Java 7 中工作。免责声明:这是我的第一个堆栈问题。

我的特定项目是尝试获取 2 个时间戳以及从中提取的本地日期,其中第一个日期是记录创建日期,第二个日期是响应日期,然后确定这些日期是否在我的工作日内。我稍后会发现差异。

我已经超出了我的理解范围,因此我需要帮助将 Java 8 代码“翻译”为 Java 7。

我搜索了一些松散相关的答案,但我正在努力掌握这些概念固有的基础知识。

主要代码

        int allDaysBetween = (int) (ChronoUnit.DAYS.between(fromDay, toDay) + 1);
long allWorkingMinutes = IntStream.range(0, allDaysBetween)
.filter(i -> isWorkingDay(from.plusDays(i)))
.count() * WORKING_MINUTES_PER_DAY ;

支持代码

    private boolean isWorkingDay(final LocalDateTime time) {
return time.getDayOfWeek().getValue() < DayOfWeek.SATURDAY.getValue();
}

我只是需要一个功能相当的东西。根据我的理解,plusDays 会将我的办公室关闭的时间添加到我的创建日期中,因此当我从响应日期获得差异时,我将得到一个具有较小值的 int。

实际应用是这样的:

  • 办公室于2019年4月5日19:00:00关闭

  • 记录创建于2019-04-06 09:35:00

  • 办公室于2019-04-08 06:00:00开业

  • 回复于 2019-04-08 07:32:00 创建

我不想包含周末时间,而是想排除它,这样当我找到差异时,我最终会根据工作时间得到“正确”的分钟数。

最佳答案

以下 Java 8+ 流代码:

long allWorkingMinutes = IntStream.range(0, allDaysBetween)
.filter(i -> isWorkingDay(from.plusDays(i)))
.count() * WORKING_MINUTES_PER_DAY ;

与适用于任何 Java 版本的通用代码相同:

long count = 0;
for (int i = 0; i < allDaysBetween; i++)
if (isWorkingDay(from.plusDays(i)))
count++;
long allWorkingMinutes = count * WORKING_MINUTES_PER_DAY ;

对于 ChronoUnitLocalDateTimeDayOfWeek 类,请使用 ThreeTen Backport Java SE 6 和 7 支持。

关于java - 转换 Java 7 的 IntStream 过滤器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55661080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com