La java.time.Duration
clase incorporado en Java 8 y posterior representa un lapso de tiempo sin ataduras a la línea de tiempo en la escala de horas-minutos-segundos. La clase ofrece un plus
método para resumir dos de esos espacios de tiempo.
Los java.time clases utilizan objetos inmutables. Así que el Duration::plus
método devuelve un nuevo tercer Duration
objeto como resultado en vez de alterar (mutando) cualquiera de los objetos de entrada.
La sintaxis convencional para resumir una colección de Duration
objetos sería la siguiente.
Duration total = Duration.ZERO;
for ( Duration duration : durations )
{
total = total.plus( duration );
}
Pueden corrientes pueden utilizar en lugar de este for
circuito?
Esto se puede lograr usando el sobrecargado Stream#reduce
método que acepta una identidad:
durations.stream().reduce(Duration.ZERO, Duration::plus)
El siguiente fragmento de un ejemplo:
var durations = List.of(Duration.ofDays(1), Duration.ofHours(1));
System.out.println(durations.stream().reduce(Duration.ZERO, Duration::plus));
Como era de esperar, la salida es:
PT25H