【发布时间】:2020-08-15 22:15:00
【问题描述】:
我正在尝试将这个使用经典 FOR 的方法传递给 Stream API
public static List<DateBucket> bucketize(ZonedDateTime fromDate,ZonedDateTime toDate, int bucketSize, ChronoUnit bucketSizeUnit) {
List<DateBucket> buckets = new ArrayList<>();
boolean reachedDate = false;
for (int i = 0; !reachedDate; i++) {
ZonedDateTime minDate = fromDate.plus(i * bucketSize, bucketSizeUnit);
ZonedDateTime maxDate = fromDate.plus((i + 1) * bucketSize, bucketSizeUnit);
reachedDate = toDate.isBefore(maxDate);
buckets.add(new DateBucket(minDate.toInstant(), maxDate.toInstant()));
}
return buckets;
}
类似这样的:
List<DateBucket> buckets =
buckets.stream().map(i-> new DateBucket(minDate.toInstant(),maxDate.toInstant()))
.collect(Collectors.toList());
谢谢
【问题讨论】:
-
您使用的是什么版本的 Java?如果可能的话,这在 8 中将比在 9 中更难。此外,
bucketSize和bucketSizeUnit一起可能更好地表示为Period或Duration(ZonedDateTime很糟糕,因为不清楚是哪一个) -
@LouisWasserman 该方法可能只接受
TemporalAmount。这是Duration和Period都实现的接口。 -
@OleV.V.虽然这是真的,但将
Duration和Period混为一谈也是有问题的。
标签: java java-stream zoneddatetime