regenerate method
Regenerates a set to have provided newLength.
If current length is greater than newLength it will remove last ones
to match new length.
Removed elements can be handled by onRemove.
If current length is lower than newLength we generate new ones
to match new length.
If length matches current, does nothing.
Implementation
void regenerate({
required int newLength,
required T Function(int) generate,
void Function(T)? onRemove,
}) {
assert(newLength >= 0, "new length can't be lower than 0");
final diff = length - newLength;
if (diff == 0) return;
if (diff > 0) {
while (length > newLength) {
final removedElement = first;
remove(removedElement);
onRemove?.call(removedElement);
}
} else {
for (var i = 0; i > diff; i--) {
add(generate(length - i));
}
}
}