maxBy<S, T> function Null safety

S? maxBy<S, T>(
  1. Iterable<S> values,
  2. T orderBy(
    1. S?
    ),
  3. {int? compare(
    1. T,
    2. T
    )?}
)

Returns the element of values for which orderBy returns the maximum value.

The values returned by orderBy are compared using the compare function. If compare is omitted, values must implement Comparable<T> and they are compared using their Comparable.compareTo.

Returns null if values is empty.

Implementation

S? maxBy<S, T>(Iterable<S> values, T Function(S?) orderBy,
    {int? Function(T, T)? compare}) {
  compare ??= defaultCompare;

  S? maxValue;
  T? maxOrderBy;
  for (var element in values) {
    var elementOrderBy = orderBy(element);
    if (maxOrderBy == null || compare(elementOrderBy, maxOrderBy)! > 0) {
      maxValue = element;
      maxOrderBy = elementOrderBy;
    }
  }
  return maxValue;
}