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

org.rapidoid.fluent.flow.FlowImpl Maven / Gradle / Ivy

There is a newer version: 5.4.6
Show newest version
package org.rapidoid.fluent.flow;

/*
 * #%L
 * rapidoid-fluent
 * %%
 * Copyright (C) 2014 - 2016 Nikolche Mihajlovski and contributors
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */

import org.rapidoid.fluent.Do;
import org.rapidoid.fluent.Flow;
import org.rapidoid.fluent.To;
import org.rapidoid.fluent.utils.StreamUtils;

import java.util.*;
import java.util.function.*;
import java.util.stream.*;

/**
 * @author Nikolche Mihajlovski
 * @since 5.0.0
 */
public class FlowImpl implements Flow {

	private final Stream stream;

	public FlowImpl(Stream stream) {
		this.stream = stream;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Iterator iterator() {
		return stream.iterator();
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Spliterator spliterator() {
		return stream.spliterator();
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public boolean isParallel() {
		return stream.isParallel();
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public FlowImpl sequential() {
		return new FlowImpl(stream.sequential());
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public FlowImpl parallel() {
		return new FlowImpl(stream.parallel());
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public FlowImpl unordered() {
		return new FlowImpl(stream.unordered());
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public FlowImpl onClose(Runnable closeHandler) {
		return new FlowImpl(stream.onClose(closeHandler));
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void close() {
		stream.close();
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public FlowImpl filter(Predicate predicate) {
		return new FlowImpl(stream.filter(predicate));
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public  FlowImpl map(Function mapper) {
		return new FlowImpl(stream.map(mapper));
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public IntStream mapToInt(ToIntFunction mapper) {
		return stream.mapToInt(mapper);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public LongStream mapToLong(ToLongFunction mapper) {
		return stream.mapToLong(mapper);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public DoubleStream mapToDouble(ToDoubleFunction mapper) {
		return stream.mapToDouble(mapper);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public  FlowImpl flatMap(Function> mapper) {
		return new FlowImpl(stream.flatMap(mapper));
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public IntStream flatMapToInt(Function mapper) {
		return stream.flatMapToInt(mapper);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public LongStream flatMapToLong(Function mapper) {
		return stream.flatMapToLong(mapper);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public DoubleStream flatMapToDouble(Function mapper) {
		return stream.flatMapToDouble(mapper);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public FlowImpl distinct() {
		return new FlowImpl(stream.distinct());
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public FlowImpl sorted() {
		return new FlowImpl(stream.sorted());
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public FlowImpl sorted(Comparator comparator) {
		return new FlowImpl(stream.sorted(comparator));
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public FlowImpl peek(Consumer action) {
		return new FlowImpl(stream.peek(action));
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public FlowImpl limit(long maxSize) {
		return new FlowImpl(stream.limit(maxSize));
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public FlowImpl skip(long n) {
		return new FlowImpl(stream.skip(n));
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void forEach(Consumer action) {
		stream.forEach(action);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public void forEachOrdered(Consumer action) {
		stream.forEachOrdered(action);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Object[] toArray() {
		return stream.toArray();
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public  A[] toArray(IntFunction generator) {
		return stream.toArray(generator);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public T reduce(T identity, BinaryOperator accumulator) {
		return stream.reduce(identity, accumulator);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Optional reduce(BinaryOperator accumulator) {
		return stream.reduce(accumulator);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public  U reduce(U identity, BiFunction accumulator, BinaryOperator combiner) {
		return stream.reduce(identity, accumulator, combiner);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public  R collect(Supplier supplier, BiConsumer accumulator, BiConsumer combiner) {
		return stream.collect(supplier, accumulator, combiner);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public  R collect(Collector collector) {
		return stream.collect(collector);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Optional min(Comparator comparator) {
		return stream.min(comparator);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Optional max(Comparator comparator) {
		return stream.max(comparator);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public long count() {
		return stream.count();
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public boolean anyMatch(Predicate predicate) {
		return stream.anyMatch(predicate);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public boolean allMatch(Predicate predicate) {
		return stream.allMatch(predicate);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public boolean noneMatch(Predicate predicate) {
		return stream.noneMatch(predicate);
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Optional findFirst() {
		return stream.findFirst();
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Optional findAny() {
		return stream.findAny();
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public List toList() {
		return stream.collect(To.list());
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Set toSet() {
		return stream.collect(To.set());
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public  Map toMap(Function keyTransformation, Function valueTransformation) {
		return stream.collect(To.map(keyTransformation, valueTransformation));
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Stream stream() {
		return stream;
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public  Flow withNonNull(Function transformation) {
		return new FlowImpl<>(stream.filter(x -> transformation.apply(x) != null));
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public  Flow withNull(Function transformation) {
		return new FlowImpl<>(stream.filter(x -> transformation.apply(x) == null));
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public  Map> groupBy(Function transformation) {
		return stream.collect(Collectors.groupingBy(transformation));
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Flow reverse() {
		List list = toList();
		Collections.reverse(list);
		return new FlowImpl<>(Do.stream(list));
	}

	/**
	 * {@inheritDoc}
	 */
	@Override
	public Optional findLast() {
		return StreamUtils.findLastOf(stream);
	}

}