package org.infinispan.stream.impl; import java.util.function.Supplier; import java.util.stream.Stream; import org.infinispan.factories.ComponentRegistry; /** * Interface describing an operation that is a terminal one that doesn't track keys. * @param <R> the returing result */ public interface TerminalOperation<R> extends SegmentAwareOperation { /** * Actually runs the terminal operation returning the result from the operation * @return the value retrieved for the operation */ R performOperation(); /** * Sets the local supplier for the stream. This is to be invoked on a remote node after the object is unmarshalled * to set the supplier to use * @param supplier the supplier that will return the stream that the operations are performed on */ void setSupplier(Supplier<? extends Stream<?>> supplier); /** * Handles injection of components for various intermediate and this operation. * @param registry component registry to use */ void handleInjection(ComponentRegistry registry); }