io.rouz.flo.ValueFold Maven / Gradle / Ivy
package io.rouz.flo;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collector;
import java.util.stream.Stream;
import io.rouz.flo.TaskContext.Value;
/**
* A function that folds a {@link List} of {@link Value}s into a {@link Value} of a {@link List}.
*
* It can be used with a {@link Collector} to fold a {@link Stream} of {@link Value}s.
*/
final class ValueFold implements Function>, Value>> {
private final TaskContext taskContext;
ValueFold(TaskContext taskContext) {
this.taskContext = Objects.requireNonNull(taskContext);
}
static ValueFold inContext(TaskContext taskContext) {
return new ValueFold<>(taskContext);
}
@Override
public Value> apply(List> list) {
Value> values = taskContext.immediateValue(new ArrayList<>());
for (Value tValue : list) {
values = Values.mapBoth(taskContext, values, tValue, (l, t) -> {
l.add(t);
return l;
});
}
return values;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy