Scala中获取今日与15天前所有Instant的等效实现方法
Scala生成今日至15天前所有Instant集合的等效实现
需求说明
需要获取从今日到今日减15天之间的所有Instant实例集合,已知Java的实现代码,求Scala的等效写法。
Java参考代码
Set<Instant> allPossibleDates = Stream.iterate(today, date -> date.minus(1, ChronoUnit.DAYS)) .limit(numDates) .collect(Collectors.toSet());
Scala等效实现
方式一:使用LazyList(对应Java Stream.iterate逻辑)
import java.time.{ChronoUnit, Instant} val today = Instant.now() val numDates = 15 val allPossibleDates: Set[Instant] = LazyList.iterate(today)(_.minus(1, ChronoUnit.DAYS)) .take(numDates) .toSet
LazyList.iterate和Java的Stream.iterate逻辑一致:从初始值today开始,每次生成前一天的Instanttake(numDates)对应Java的limit(numDates),截取前15个元素toSet直接将懒加载列表转换为集合,等效于Java的collect(Collectors.toSet())
方式二:使用Range+Map(更简洁直观)
import java.time.{ChronoUnit, Instant} val today = Instant.now() val numDates = 15 val allPossibleDates: Set[Instant] = (0 until numDates).map(days => today.minus(days, ChronoUnit.DAYS)).toSet
0 until numDates生成0到14的整数序列,每个数值代表从今日往前推的天数- 通过
map将每个天数转换为对应的Instant实例,最后转成集合
内容的提问来源于stack exchange,提问作者Mikasa
相关产品推荐
相关产品推荐

