斯卡拉:排除一些日期

时间:2016-05-18 17:25:09

标签: scala date

我有一个我想忽略的日期列表:

 private val excludeDates = List(
              new DateTime("2015-07-17"),
               new DateTime("2015-07-20"),
               new DateTime("2015-07-23")
              )

但我总是需要显示四个日期,不包括我的黑色日期列表和周末。到目前为止,使用以下代码,当我点击一个被忽略的日期时,我的计数器会增加并且它会产生感觉。那么我怎么能跳到下一个日期,直到我在我的黑名单和我的周末中找到4个日期?也许有一段时间,但我不知道如何在我的scala代码中添加它:

1 to 4  map { endDate.minusDays(_)} diff excludeDates filter {
              _.getDayOfWeek() match {
                         case DateTimeConstants.SUNDAY |       DateTimeConstants.SATURDAY => false
                case _ => true
              }
            }

2 个答案:

答案 0 :(得分:7)

您可以使用val blacklist = excludeDates.toSet Stream.from(1) .map(endDate.minusDays(_)) .filter(dt => ! blacklist.contains(dt)) .take(4) .toList

{{1}}

答案 1 :(得分:1)

我会以快速粗暴的方式做到这一点

val upperLimit = 4 + excludeDates.length

(1 to upperLimit).map( endDate.minusDays ).filter( d => !excludeDates.contains(d) ).take(4)

简而言之,您可以从最后日期向后移动所需日期的最大数量加上排除日期的大小,然后您过滤序列检查,如果日期不是排除列表,最后您只选择日期需要.take(n)

希望有所帮助:)