All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javascalautils.Projection Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 2015 Peter Nerg
 *
 * 

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 javascalautils; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.function.Supplier; import java.util.stream.Stream; /** * Abstract base class for the projections used by {@link Either}. * * @author Peter Nerg * @since 1.1 */ abstract class Projection implements Iterable { /** * Returns the value of the Right/Left in {@link Some} side in case the projection matches the * side, else {@link None}.
* That is:
* If this is a {@link RightProjection} with a {@link Right}
* or
* If this is a {@link LeftProjection} with a {@link Left}.
* Then then return {@link Some} containing the value of the {@link Left}/{@link Right}.
* Any other case, return {@link None}. * * @return The Option * @since 1.1 */ public Option asOption() { return Option.apply(orNull()); } /** * Returns the value of the Right/Left side in case the projection matches the side, else throw * {@link NoSuchElementException}.
* That is:
* If this is a {@link RightProjection} with a {@link Right}
* or
* If this is a {@link LeftProjection} with a {@link Left}.
* Then return the value of the {@link Left}/{@link Right}.
* Any other case, throw {@link NoSuchElementException}. * * @return The value * @since 1.1 */ public T get() { return asOption().get(); } /** * Returns the iterator of the Right/Left side in case the projection matches the side.
* That is:
* If this is a {@link RightProjection} with a {@link Right}
* or
* If this is a {@link LeftProjection} with a {@link Left}.
* Then return an iterator with the value for the {@link Left}/{@link Right}.
* Else return an empty iterator * * @return The iterator * @since 1.1 */ @Override public Iterator iterator() { return stream().iterator(); } /** * Returns the stream of the Right/Left side in case the projection matches the side.
* That is:
* If this is a {@link RightProjection} with a {@link Right}
* or
* If this is a {@link LeftProjection} with a {@link Left}.
* Then return a stream with the value for the {@link Left}/{@link Right}.
* Else return an empty stream * * @return The stream * @since 1.1 */ public Stream stream() { return asOption().stream(); } /** * Returns the value of this projection if it is of the correct type else null.
* That is:
* If this is a {@link RightProjection} with a {@link Right}
* or
* If this is a {@link LeftProjection} with a {@link Left}.
* Then return the value of the {@link Left}/{@link Right}.
* Any other case, return null.
* In an essence this is a specialized version of {@link #getOrElse(Supplier)} where the supplier * returns null.
* *

* * getOrElse(() -> null) * *
* * @return The value or null * @since 1.1 */ public T orNull() { return getOrElse(() -> null); } /** * Returns the value of this projection if it is of the correct type else else the value provided * by the supplier.
* That is:
* If this is a {@link RightProjection} with a {@link Right}
* or
* If this is a {@link LeftProjection} with a {@link Left}.
* Then return the value of the {@link Left}/{@link Right}.
* Any other case, return the value provided by the supplier. * * @param supplier The supplier to use if else becomes used * @return The value or null * @since 1.1 */ public abstract T getOrElse(Supplier supplier); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy