package bjc.utils.data; import java.util.function.Function; import java.util.function.UnaryOperator; import bjc.utils.funcdata.IFunctionalList; class BoundListHolder implements IHolder { private IFunctionalList> heldHolders; public BoundListHolder( IFunctionalList> toHold) { heldHolders = toHold; } @Override public IHolder bind( Function> binder) { IFunctionalList> boundHolders = heldHolders .map((containedHolder) -> { return containedHolder.bind(binder); }); return new BoundListHolder<>(boundHolders); } @Override public IHolder map( Function mapper) { IFunctionalList> mappedHolders = heldHolders .map((containedHolder) -> { return containedHolder.map(mapper); }); return new BoundListHolder<>(mappedHolders); } @Override public IHolder transform( UnaryOperator transformer) { heldHolders.forEach((containedHolder) -> { containedHolder.transform(transformer); }); return this; } @Override public UnwrappedType unwrap( Function unwrapper) { return heldHolders.randItem().unwrap(unwrapper); } @Override public Function> lift( Function func) { return (val) -> { return new ListHolder<>(func.apply(val)); }; } }