net.sf.staccatocommons.collections.stream.impl.internal.AbstractTransformStream Maven / Gradle / Ivy
/*
Copyright (c) 2011, The Staccato-Commons Team
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; version 3 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
*/
package net.sf.staccatocommons.collections.stream.impl.internal;
import java.util.List;
import net.sf.staccatocommons.collections.stream.AbstractStream;
import net.sf.staccatocommons.collections.stream.Stream;
import net.sf.staccatocommons.defs.Thunk;
import net.sf.staccatocommons.iterators.thriter.Thriterator;
import net.sf.staccatocommons.lang.tuple.Pair;
import net.sf.staccatocommons.restrictions.check.NonNull;
/**
* @author flbulgarelli
*/
public abstract class AbstractTransformStream extends AbstractStream {
private final Stream stream;
private Stream streamCached;
/**
* Creates a new {@link AbstractTransformStream}
*/
public AbstractTransformStream(@NonNull Stream stream) {
this.stream = stream;
}
@Override
public final Thriterator iterator() {
return applyCached().iterator();
}
@Override
public final B get(int n) {
return applyCached().get(n);
}
@Override
public final Pair, Stream> delayedDecons() {
return applyCached().delayedDecons();
}
@Override
public final boolean isEmpty() {
return applyCached().isEmpty();
}
public final int size() {
return applyCached().size();
}
@Override
public final List toList() {
return applyCached().toList();
}
private Stream applyCached() {
if (streamCached == null)
streamCached = apply();
return streamCached;
}
protected abstract Stream apply();
/**
* @return the stream
*/
protected Stream getStream() {
return stream;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy