diff options
| author | bjculkin <bjculkin@WIT-136XG42.wvu-ad.wvu.edu> | 2017-02-27 10:11:43 -0500 |
|---|---|---|
| committer | bjculkin <bjculkin@WIT-136XG42.wvu-ad.wvu.edu> | 2017-02-27 10:11:43 -0500 |
| commit | e6459a351f14d76dbac83e95a55664820387ad7b (patch) | |
| tree | 3fba82ce642fb6da2359bf55510b87fcd8064a88 /BJC-Utils2/src/main/java/bjc/utils/data/internals/WrappedLazy.java | |
| parent | 0b4fd83d36eb82c92a39af8b8e1c521d822bd4c3 (diff) | |
Package reorganization
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/data/internals/WrappedLazy.java')
| -rw-r--r-- | BJC-Utils2/src/main/java/bjc/utils/data/internals/WrappedLazy.java | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/data/internals/WrappedLazy.java b/BJC-Utils2/src/main/java/bjc/utils/data/internals/WrappedLazy.java new file mode 100644 index 0000000..7f0b8db --- /dev/null +++ b/BJC-Utils2/src/main/java/bjc/utils/data/internals/WrappedLazy.java @@ -0,0 +1,62 @@ +package bjc.utils.data.internals; + +import java.util.function.Function; +import java.util.function.UnaryOperator; + +import bjc.utils.data.IHolder; +import bjc.utils.data.Lazy; + +public class WrappedLazy<ContainedType> implements IHolder<ContainedType> { + private IHolder<IHolder<ContainedType>> held; + + public WrappedLazy(IHolder<ContainedType> wrappedHolder) { + held = new Lazy<>(wrappedHolder); + } + + // This has an extra parameter, because otherwise it erases to the same + // as the public one + private WrappedLazy(IHolder<IHolder<ContainedType>> wrappedHolder, boolean dummy) { + held = wrappedHolder; + } + + @Override + public <BoundType> IHolder<BoundType> bind(Function<ContainedType, IHolder<BoundType>> binder) { + IHolder<IHolder<BoundType>> newHolder = held.map((containedHolder) -> { + return containedHolder.bind(binder); + }); + + return new WrappedLazy<>(newHolder, false); + } + + @Override + public <NewType> Function<ContainedType, IHolder<NewType>> lift(Function<ContainedType, NewType> func) { + return (val) -> { + return new Lazy<>(func.apply(val)); + }; + } + + @Override + public <MappedType> IHolder<MappedType> map(Function<ContainedType, MappedType> mapper) { + IHolder<IHolder<MappedType>> newHolder = held.map((containedHolder) -> { + return containedHolder.map(mapper); + }); + + return new WrappedLazy<>(newHolder, false); + } + + @Override + public IHolder<ContainedType> transform(UnaryOperator<ContainedType> transformer) { + held.transform((containedHolder) -> { + return containedHolder.transform(transformer); + }); + + return this; + } + + @Override + public <UnwrappedType> UnwrappedType unwrap(Function<ContainedType, UnwrappedType> unwrapper) { + return held.unwrap((containedHolder) -> { + return containedHolder.unwrap(unwrapper); + }); + } +} |
