Some possible enhancements for java.time.Duration?
Robert Marcano
robert at marcanoonline.com
Tue Jun 15 16:48:45 UTC 2021
On 6/15/21 10:15 AM, dfranken.jdk at gmail.com wrote:
> Dear readers,
>
> I think java.time.Duration is a pretty useful class and after having to
> work a lot with it, I recognized there might be some enhancements we
> could make (where 'enhancement' is a subjective term of course).
>
> For instance:
>
> Comparison
> ----------
> boolean isGreaterThan(Duration duration) / isLongerThan(..)
> boolean isSmallerThan(Duration duration) / isShorterThan(..)
>
> English is not my primary language so I don't know which of these
> aliases would be better. Given that classes such as Instant and
> OffsetDateTime also have comparison methods (isAfter, isBefore), I
> think it would be useful if Duration had easy comparison methods. Of
> course we have compareTo(..) but I always get confused what it actually
> means when I get a positive or negative number. :)
A small tip when using compareTo, don´t think about the numbers but the
operation. Always compare to 0
object1.compareTo(object2) > 0
==>
object1 > object2
You only change the comparison operator, and it always means object1
<operator> object2
>
> More comparison
> ---------------
> static Duration max(Duration d1, Duration d2)
> static Duration min(Duration d1, Duration d2)
>
> Returns the longest resp. shortest of the two durations, where negative
> durations are shorter than positive durations.
>
> Side note: I have not found an easy method to obtain the max resp. min
> values of elements which implement Comparable, I could only come up
> with something like:
>
> Stream.of(Duration.ZERO, Duration.ofSeconds(1L))
> .max/min(Comparator.naturalOrder())
> .orElse(null);
>
> It could be worthwile to add generic methods such as
> public static <T extends Comparable<T>> T max(T... elements)
> public static <T extends Comparable<T>> T min(T... elements)
> in the Comparator class.
>
> Disallowing negative value
> --------------------------
> Okay, this one is a bit more farfetched, but a method which would be
> useful for my use case is to have an alternative of between() which is
> never negative and just truncates to zero if it happens to be negative.
>
> I'm measuring a duration between timestamps which come from different
> systems which should be in sync with their NTP servers (and each
> other), but there may still be some time dilation which could lead to
> weird results making it look like the effect happened before the cause.
>
> So I could see some use for a method like:
>
> Duration positiveOrZero()
>
>
> Kind regards,
>
> Dave Franken
>
More information about the core-libs-dev
mailing list