-
Notifications
You must be signed in to change notification settings - Fork 90
Open
Description
I propose the following modifier functionality:
typedef Modifier<T> = T Function(T val);
typedef ConditionCheck<T> = bool Function(T val);
extension ModificationExtension<T> on Iterable<T> {
Iterable<T> modifyWhere(
ConditionCheck<T> shouldModify,
Modifier<T> modifier,
) {
return map((item) => shouldModify(item) ? modifier(item) : item);
}
Iterable<T> modifyFirstWhere(
ConditionCheck<T> shouldModify,
Modifier<T> modifier,
) {
bool modified = false;
return modifyWhere(
(v) => !modified && shouldModify(v),
(v) {
modified = true;
return modifier(v);
},
);
}
}
void main() {
final items = [1, 2, 3, 4, 5, 6];
final a = items.modifyWhere((v) => v < 3, (i) => -i);
final b = items.modifyFirstWhere((v) => v > 3, (i) => -i);
print(a); // (-1, -2, 3, 4, 5, 6)
print(b); // (1, 2, 3, -4, 5, 6)
}
Motivation
Very common operation when modifying certain items in a list.
RenanDelfanti, TimWhiting and rishabhdeepsingh
Metadata
Metadata
Assignees
Labels
No labels