fromItems<T, G> static method
List<VoGroup<T, G> >
fromItems<T, G>(
- List<
T> items, - G groupBy(
- T item
- Comparator<
G> ? groupComparator, - Comparator<
T> ? itemComparator,
Splits items into groups by groupBy.
Groups keep the order their first item appears in items unless
groupComparator is set; items keep their order within a group unless
itemComparator is set.
Implementation
static List<VoGroup<T, G>> fromItems<T, G>(
List<T> items,
G Function(T item) groupBy, {
Comparator<G>? groupComparator,
Comparator<T>? itemComparator,
}) {
final grouped = <G, List<T>>{};
for (final item in items) {
grouped.putIfAbsent(groupBy(item), () => <T>[]).add(item);
}
final keys = grouped.keys.toList();
if (groupComparator != null) keys.sort(groupComparator);
return [
for (final key in keys)
VoGroup(
key,
itemComparator == null
? grouped[key]!
: (grouped[key]!..sort(itemComparator)),
),
];
}