extent< T> function
Returns the minimum and maximum values in i
, according to the order
specified by the compare
function, in an Extent instance. Always
returns an Extent, but Extent.min and Extent.max may be null
if i
is empty.
The compare function must act as a Comparator. If compare
is omitted,
Comparable.compare is used. If i
contains null elements, an exception
will be thrown.
If i
is empty, an Extent is returned with null
values for min
and max
, since there are no valid values for them.
Implementation
Extent<T> extent<T>(Iterable<T> i, [Comparator<T> compare]) {
if (i.isEmpty) return new Extent(null, null);
final Comparator<T> _compare = compare ?? Comparable.compare;
var iterator = i.iterator;
var hasNext = iterator.moveNext();
if (!hasNext) return new Extent(null, null);
var max = iterator.current;
var min = iterator.current;
while (iterator.moveNext()) {
if (_compare(max, iterator.current) < 0) max = iterator.current;
if (_compare(min, iterator.current) > 0) min = iterator.current;
}
return new Extent(min, max);
}