创建包含顺序元素的列表

问题描述 投票:0回答:2

Java中是否有一个实用方法(也许是

stream()
)来生成顺序元素列表,例如按常量值(秒,分钟,小时)增加的时间?

bySeconds(Start_time="10:00:00" interval=2, count=100)=>{"10:00:00", "10:00:02", "10:00:04", "10:00:06", "10:00:08", ......}

byMinutes(Start_time="10:00:00", interval=5, count=100)=>{"10:05:00", "10:10:00", "10:15:00", "10:20:00", "10:25:00", ......}

byHours(Start_time="10:00:00", interval=1, count=100)=>{"10:00:00", "11:00:00", "12:00:00", "13:00:00", "14:00:00", ......}
java list arraylist java-stream java-time
2个回答
1
投票

是的

Stream.iterate
就是为此目的而设计的。例如:

Stream.iterate(LocalTime.of(10, 5), Duration.ofMinutes(5)::addTo)

将生成从 10:05 开始并增加 5 分钟的无限时间流。如果您想要一个特定的终点,可以使用

Stream.limit
来获取某个数字,或者向
Stream.iterate
添加谓词或使用
Stream.takeWhile
在某个点结束。要转换为列表,请使用
Stream.toList

如果您希望将时间转换为特定的字符串格式,请使用

DateTimeFormatter
。例如,转换为您问题示例中的格式:

.map(DateTimeFormatter.ISO_LOCAL_TIME::format)

0
投票

您可以使用

IntStream
创建
IntStream.range(start, endExclusive)
,然后在流上使用
.map()
.mapToObj()
将值映射到其他内容。所有值都是连续的,因此
IntStream.range(0, 10)
将生成包含
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
的流。

© www.soinside.com 2019 - 2024. All rights reserved.