com.landawn.abacus.util.OptionalBoolean Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of abacus-android-se-jdk7 Show documentation
Show all versions of abacus-android-se-jdk7 Show documentation
A general programming library in Java
/*
* Copyright (c) 2017, Haiyang Li.
*
* 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 com.landawn.abacus.util;
import java.util.NoSuchElementException;
import java.util.Objects;
import com.landawn.abacus.util.function.Supplier;
import com.landawn.abacus.util.stream.Stream;
public final class OptionalBoolean implements Comparable {
private static final OptionalBoolean EMPTY = new OptionalBoolean();
private final boolean value;
private final boolean isPresent;
private OptionalBoolean() {
this.value = false;
this.isPresent = false;
}
private OptionalBoolean(boolean value) {
this.value = value;
this.isPresent = true;
}
public static OptionalBoolean empty() {
return EMPTY;
}
public static OptionalBoolean of(boolean value) {
return new OptionalBoolean(value);
}
public static OptionalBoolean ofNullable(Boolean val) {
if (val == null) {
return empty();
} else {
return OptionalBoolean.of(val);
}
}
public boolean get() throws NoSuchElementException {
return orElseThrow();
}
public boolean isPresent() {
return isPresent;
}
public void ifPresent(Try.BooleanConsumer action) throws E {
Objects.requireNonNull(action);
if (isPresent) {
action.accept(value);
}
}
public void ifPresentOrElse(Try.BooleanConsumer action, Try.Runnable emptyAction) throws E, E2 {
Objects.requireNonNull(action);
Objects.requireNonNull(emptyAction);
if (isPresent) {
action.accept(value);
} else {
emptyAction.run();
}
}
public OptionalBoolean filter(Try.BooleanPredicate predicate) throws E {
Objects.requireNonNull(predicate);
if (isPresent && predicate.test(value)) {
return this;
} else {
return empty();
}
}
public OptionalBoolean map(final Try.BooleanUnaryOperator mapper) throws E {
Objects.requireNonNull(mapper);
if (isPresent) {
return OptionalBoolean.of(mapper.applyAsBoolean(value));
} else {
return empty();
}
}
public Nullable mapToObj(final Try.BooleanFunction mapper) throws E {
Objects.requireNonNull(mapper);
if (isPresent) {
return Nullable.of(mapper.apply(value));
} else {
return Nullable. empty();
}
}
public OptionalBoolean flatMap(Try.BooleanFunction mapper) throws E {
Objects.requireNonNull(mapper);
if (isPresent) {
return Objects.requireNonNull(mapper.apply(value));
} else {
return empty();
}
}
public OptionalBoolean or(Try.Supplier supplier) throws E {
if (isPresent) {
return this;
} else {
return Objects.requireNonNull(supplier.get());
}
}
public boolean orFalse() {
return isPresent ? value : false;
}
// public boolean orElseFalse() {
// return isPresent ? value : false;
// }
public boolean orTrue() {
return isPresent ? value : true;
}
// public boolean orElseTrue() {
// return isPresent ? value : true;
// }
public boolean orElseThrow() throws NoSuchElementException {
if (isPresent) {
return value;
} else {
throw new NoSuchElementException("No value present");
}
}
public boolean orElse(boolean other) {
return isPresent ? value : other;
}
public boolean orElseGet(Try.BooleanSupplier other) throws E {
Objects.requireNonNull(other);
if (isPresent) {
return value;
} else {
return other.getAsBoolean();
}
}
public boolean orElseThrow(Supplier extends X> exceptionSupplier) throws X {
Objects.requireNonNull(exceptionSupplier);
if (isPresent) {
return value;
} else {
throw exceptionSupplier.get();
}
}
@Override
public int compareTo(OptionalBoolean optional) {
if (optional == null || optional.isPresent == false) {
return isPresent ? 1 : 0;
}
if (isPresent == false) {
return -1;
}
return Boolean.compare(this.get(), optional.get());
}
public Stream stream() {
if (isPresent) {
return Stream.of(value);
} else {
return Stream.empty();
}
}
public Optional boxed() {
if (isPresent) {
return Optional.of(value);
} else {
return Optional. empty();
}
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof OptionalBoolean) {
final OptionalBoolean other = (OptionalBoolean) obj;
return (isPresent && other.isPresent) ? value == other.value : isPresent == other.isPresent;
}
return false;
}
@Override
public int hashCode() {
return N.hashCode(isPresent) * 31 + N.hashCode(value);
}
@Override
public String toString() {
if (isPresent) {
return String.format("OptionalBoolean[%s]", value);
}
return "OptionalBoolean.empty";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy