![JAR search and dependency download from the Maven repository](/logo.png)
io.rouz.task.ValueFold Maven / Gradle / Ivy
package io.rouz.task;
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.task.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.flatMap(
l -> tValue.map(
t -> {
l.add(t);
return l;
}
));
}
return values;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy