minByOrNull method

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

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

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

举例:

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

Implementation

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