package bjc.utils.data; import java.util.function.Function; import java.util.function.UnaryOperator; import bjc.utils.funcdata.IList; /* * Holds a list, converted into a holder */ class BoundListHolder implements IHolder { private IList> heldHolders; public BoundListHolder(IList> toHold) { heldHolders = toHold; } @Override public IHolder bind( Function> binder) { if (binder == null) { throw new NullPointerException("Binder must not be null"); } IList> boundHolders = heldHolders .map((containedHolder) -> { return containedHolder.bind(binder); }); return new BoundListHolder<>(boundHolders); } @Override public Function> lift( Function func) { if (func == null) { throw new NullPointerException( "Function to lift must not be null"); } return (val) -> { return new ListHolder<>(func.apply(val)); }; } @Override public IHolder map( Function mapper) { if (mapper == null) { throw new NullPointerException("Mapper must not be null"); } IList> mappedHolders = heldHolders .map((containedHolder) -> { return containedHolder.map(mapper); }); return new BoundListHolder<>(mappedHolders); } @Override public IHolder transform( UnaryOperator transformer) { if (transformer == null) { throw new NullPointerException("Transformer must not be null"); } heldHolders.forEach((containedHolder) -> { containedHolder.transform(transformer); }); return this; } @Override public UnwrappedType unwrap( Function unwrapper) { if (unwrapper == null) { throw new NullPointerException("Unwrapper must not be null"); } return heldHolders.randItem().unwrap(unwrapper); } }