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

io.datakernel.datastream.StreamConsumerToList Maven / Gradle / Ivy

package io.datakernel.datastream;

import io.datakernel.promise.Promise;
import io.datakernel.promise.SettablePromise;

import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;

import static io.datakernel.datastream.StreamCapability.LATE_BINDING;

public final class StreamConsumerToList extends AbstractStreamConsumer implements StreamDataAcceptor {
	private final List list;
	private final SettablePromise> resultPromise = new SettablePromise<>();

	private StreamConsumerToList() {
		this(new ArrayList<>());
	}

	private StreamConsumerToList(List list) {
		this.list = list;
	}

	public static  StreamConsumerToList create() {
		return new StreamConsumerToList<>();
	}

	public StreamConsumerToList withResultAcceptor(Consumer>> resultAcceptor) {
		resultAcceptor.accept(resultPromise);
		return this;
	}

	public static  StreamConsumerToList create(List list) {
		return new StreamConsumerToList<>(list);
	}

	@Override
	public void accept(T item) {
		list.add(item);
	}

	@Override
	protected void onStarted() {
		getSupplier().resume(this);
	}

	@Override
	protected Promise onEndOfStream() {
		resultPromise.set(list);
		return Promise.complete();
	}

	@Override
	protected void onError(Throwable e) {
		resultPromise.setException(e);
	}

	public Promise> getResult() {
		return resultPromise;
	}

	public final List getList() {
		return list;
	}

	@Override
	public Set getCapabilities() {
		return EnumSet.of(LATE_BINDING);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy