All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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