maxBy
키가 가장 큰 원소 — 한 번의 순회, 정렬 없이, 비어 있으면 null입니다.
A? maxBy<A>(Object? Function(A a) f, Iterable<A> iterable)
Future<A?> maxByAsync<A>(Object? Function(A a) f, FxAsyncIterable<A> iterable)
T? Fx<T>.maxBy(Object? Function(T a) f) // chain (sync)
Future<T?> FxAsync<T>.maxBy(Object? Function(T a) f) // chain (async)
강의
maxBy는 "어떤 원소가 가장 큰 키를 갖는가?"에
답합니다 — "가장 큰 숫자가 무엇인가?"가 아닙니다(그건
max입니다). 파이프라인을
한 번 순회하면서 현재까지의 최선 원소를 유지하므로
O(n)입니다. 반면 솔깃한 sortBy(key).head() 형태는
O(n log n)을 치르고, 결코 필요하지도 않은 정렬된 리스트를
구체화합니다.
키는 sortBy가 비교하는
방식(Comparable.compare)과 정확히 동일하게 비교되며,
동점일 때는 먼저 만난 첫 원소가 이깁니다 — 그래서
날짜순으로 정렬된 리스트에 maxBy를 적용하면 가장 큰
값들 중 가장 이른 것을 얻습니다.
빈 입력은 null을 반환합니다.
head,
last와 마찬가지죠 — 여기서는
Dart의 널 허용 타입이 FxTS의
undefined를 대신합니다. 이것은 Dart 고유의 추가
기능이며(FxTS는 숫자용 max만 제공합니다), 이름은
Kotlin의 maxByOrNull 형태를 따릅니다.
데모 1 · 기본 사용법, 빈 경우 & 동점
데모 2 · 비동기
직접 해 보기
연습: 정렬 없이 가장 큰 지출을 찾아보세요.