maxByOrNull method

E? maxByOrNull(
  1. dynamic selector(
    1. E element
    )
)

根据 selector 得到的值进行比对,获得最大值。(返回值可为null)

selector 得到的值为 null,则会忽略该项。

举例:

 List<String> list = ["1b", "4a", "3c"];
 list.maxByOrNull((it) => it != "3c" ? it : null) // 4a

Implementation

E? maxByOrNull(dynamic Function(E element) selector) {
  final it = iterator;
  E? max;
  while (it.moveNext()) {
    // 根据 selector 获取当前值
    final tCur = selector(it.current);
    // 根据 selector 获取历史最大值
    final tMin = max == null ? null : selector(max);
    // 当前值为 null ,则跳过当前循环
    if (tCur == null) continue;
    // 历史最大值为 null,且当前值不为 null,则赋值
    if (max == null && tCur != null) {
      max = it.current;
    } else if(tMin != null) {
      // 历史值和当前值均不为空,才进行比对。
      final c = tMin.compareTo(tCur);
      max = c > 0 ? max : it.current;
    }
  }
  return max;
}