/* * Copyright (c) 2011-2014 Fernando Petrola * * 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. */ package java.util; import java.util.Collection; import java.util.Comparator; import java.util.Iterator; import java.util.Optional; import java.util.Spliterator; import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.BinaryOperator; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.IntFunction; import java.util.function.Predicate; import java.util.function.Supplier; import java.util.function.ToDoubleFunction; import java.util.function.ToIntFunction; import java.util.function.ToLongFunction; import java.util.stream.Collector; import java.util.stream.DoubleStream; import java.util.stream.IntStream; import java.util.stream.LongStream; import java.util.stream.Stream; public class StreamImpl<T, C> implements Stream<T>, Consumer<C> { protected Consumer<C> downstream; protected StreamImpl<T, C> topStream; private Collection<T> items; public StreamImpl() { topStream= this; } public StreamImpl(StreamImpl<T, C> upstream) { topStream= upstream.topStream; upstream.downstream= this; } public StreamImpl(Collection<T> items) { this(); this.items= items; } public Iterator<T> iterator() { return items.iterator(); } public Spliterator<T> spliterator() { // TODO Auto-generated method stub return null; } public boolean isParallel() { // TODO Auto-generated method stub return false; } public Stream<T> sequential() { // TODO Auto-generated method stub return null; } public Stream<T> parallel() { // TODO Auto-generated method stub return null; } public Stream<T> unordered() { // TODO Auto-generated method stub return null; } public Stream<T> onClose(Runnable closeHandler) { // TODO Auto-generated method stub return null; } public void close() { // TODO Auto-generated method stub } public Stream<T> filter(Predicate<? super T> predicate) { return new StreamImpl<T, T>((StreamImpl<T, T>) this) { public void accept(T t) { if (predicate.test(t)) downstream.accept(t); } }; } public <R> Stream<R> map(Function<? super T, ? extends R> mapper) { return new StreamImpl<R, T>((StreamImpl<R, T>) this) { public void accept(T t) { downstream.accept((T) mapper.apply(t)); } }; } public IntStream mapToInt(ToIntFunction<? super T> mapper) { // TODO Auto-generated method stub return null; } public LongStream mapToLong(ToLongFunction<? super T> mapper) { // TODO Auto-generated method stub return null; } public DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper) { // TODO Auto-generated method stub return null; } public <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) { // TODO Auto-generated method stub return null; } public IntStream flatMapToInt(Function<? super T, ? extends IntStream> mapper) { // TODO Auto-generated method stub return null; } public LongStream flatMapToLong(Function<? super T, ? extends LongStream> mapper) { // TODO Auto-generated method stub return null; } public DoubleStream flatMapToDouble(Function<? super T, ? extends DoubleStream> mapper) { // TODO Auto-generated method stub return null; } public Stream<T> distinct() { // TODO Auto-generated method stub return null; } public Stream<T> sorted() { // TODO Auto-generated method stub return null; } public Stream<T> sorted(Comparator<? super T> comparator) { // TODO Auto-generated method stub return null; } public Stream<T> peek(Consumer<? super T> action) { // TODO Auto-generated method stub return null; } public Stream<T> limit(long maxSize) { // TODO Auto-generated method stub return null; } public Stream<T> skip(long n) { // TODO Auto-generated method stub return null; } public void forEach(Consumer<? super T> action) { new StreamImpl<T, T>((StreamImpl<T, T>) this) { public void accept(T t) { action.accept(t); } }; for (Iterator<T> iterator= topStream.iterator(); iterator.hasNext();) { T type= (T) iterator.next(); topStream.accept((C) type); } } public void forEachOrdered(Consumer<? super T> action) { // TODO Auto-generated method stub } public Object[] toArray() { // TODO Auto-generated method stub return null; } public <A> A[] toArray(IntFunction<A[]> generator) { // TODO Auto-generated method stub return null; } public T reduce(T identity, BinaryOperator<T> accumulator) { // TODO Auto-generated method stub return null; } public Optional<T> reduce(BinaryOperator<T> accumulator) { // TODO Auto-generated method stub return null; } public <U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner) { // TODO Auto-generated method stub return null; } public <R> R collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner) { // TODO Auto-generated method stub return null; } public <R, A> R collect(Collector<? super T, A, R> collector) { forEach(v -> collector.accumulator().accept(null, v)); return collector.finisher().apply(null); } public Optional<T> min(Comparator<? super T> comparator) { // TODO Auto-generated method stub return null; } public Optional<T> max(Comparator<? super T> comparator) { // TODO Auto-generated method stub return null; } public long count() { int[] counter= new int[1]; counter[0]= 0; forEach(new Consumer<T>() { public void accept(T t) { counter[0]++; } }); return counter[0]; } public boolean anyMatch(Predicate<? super T> predicate) { // TODO Auto-generated method stub return false; } public boolean allMatch(Predicate<? super T> predicate) { // TODO Auto-generated method stub return false; } public boolean noneMatch(Predicate<? super T> predicate) { // TODO Auto-generated method stub return false; } public Optional<T> findFirst() { // TODO Auto-generated method stub return null; } public Optional<T> findAny() { // TODO Auto-generated method stub return null; } @Override public void accept(C t) { downstream.accept(t); } }