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

no.finn.lambdacompanion.Success Maven / Gradle / Ivy

There is a newer version: 0.27
Show newest version
package no.finn.lambdacompanion;

import java.util.Objects;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class Success extends Try {

    private T t;

    public Success(T t) {
        this.t = t;
    }

    @Override
    public  Try map(ThrowingFunction mapper) {
        try {
            return new Success<>(mapper.apply(t));
        } catch (Throwable e) {
            return new Failure<>(e);
        }
    }

    @Override
    public  Try flatMap(ThrowingFunction, ? extends Throwable> mapper) {
        try {
            return mapper.apply(t);
        } catch (Throwable e) {
            return new Failure<>(e);
        }
    }

    @Override
    public Optional> filter(final Predicate predicate) {
        Objects.requireNonNull(predicate);
        if (predicate.test(t)) {
            return Optional.of(this);
        } else {
            return Optional.empty();
        }
    }

    @Override
    public void forEach(ThrowingConsumer consumer) {
        try {
            consumer.accept(t);
        } catch (Throwable ignore) {}
    }

    @Override
    public Try peek(ThrowingConsumer consumer) {
        forEach(consumer);
        return this;
    }

    @Override
    public Try peekFailure(Consumer> consumer) {
        return this;
    }

    @Override
    public T orElse(T defaultValue) {
        return t;
    }

    @Override
    public T orElseGet(Supplier defaultValue) {
        return t;
    }

    @Override
    public Optional toOptional() {
        return Optional.ofNullable(t);
    }

    @Override
    public  U recover(Function successFunc,
                           Function failureFunc) {
        return successFunc.apply(t);
    }

    @Override
    public Either toEither() {
        return Either.right(t);
    }

    @Override
    public  T orElseThrow(Function throwableMapper) throws Y {
        return t;
    }

    @Override
    public  T orElseRethrow() throws E {
        return t;
    }

    @Override
    public String toString() {
        return "Success{" +
                "t=" + t +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Success success = (Success) o;

        return !(t != null ? !t.equals(success.t) : success.t != null);

    }

    @Override
    public int hashCode() {
        return t != null ? t.hashCode() : 0;
    }

}