Bas*_*que 5 java immutability java-stream
java.time.DurationJava 8 及更高版本中内置的类代表了一个时间跨度,它以小时-分钟-秒为单位不附加到时间线。该类提供了plus一种对两个这样的时间跨度求和的方法。
该java.time类使用不可变对象。因此该Duration::plus方法返回一个新的第三个Duration对象作为结果,而不是改变(变异)任何一个输入对象。
对Duration对象集合求和的常规语法如下。
Duration total = Duration.ZERO;
for ( Duration duration : durations )
{
total = total.plus( duration );
}
Run Code Online (Sandbox Code Playgroud)
可以使用流代替此for循环吗?
Jac*_* G. 10
这可以使用Stream#reduce接受身份的重载方法来实现:
durations.stream().reduce(Duration.ZERO, Duration::plus)
Run Code Online (Sandbox Code Playgroud)
以下代码段提供了一个示例:
var durations = List.of(Duration.ofDays(1), Duration.ofHours(1));
System.out.println(durations.stream().reduce(Duration.ZERO, Duration::plus));
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,输出是:
PT25H
Run Code Online (Sandbox Code Playgroud)
是的,您可以使用reduce带有标识元素的操作作为
Duration total = durations.stream()
.reduce(Duration.ZERO, Duration::plus);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
391 次 |
| 最近记录: |