maxByOrNull method
E?
maxByOrNull(
- dynamic selector(
- 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;
}