diff options
author | bjormel <bjormel@yahooinc.com> | 2023-10-26 13:59:28 +0000 |
---|---|---|
committer | bjormel <bjormel@yahooinc.com> | 2023-10-26 13:59:28 +0000 |
commit | 567be9a1f6353cec41c23bfd1fcd46b4b2a4d2d7 (patch) | |
tree | 4664a743e166a5e11aee7b9acd70ad8ee2617612 /vespajlib/src/main/java/com/yahoo/collections/Optionals.java | |
parent | e9058b555d4dfea2f6c872d9a677e8678b569569 (diff) | |
parent | bce3b8e926bf9da880172acbe1ba4b12d5e026d6 (diff) |
Merge branch 'master' into bjormel/aws-main-controllerbjormel/aws-main-controller
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/collections/Optionals.java')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/collections/Optionals.java | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/collections/Optionals.java b/vespajlib/src/main/java/com/yahoo/collections/Optionals.java new file mode 100644 index 00000000000..27a1e837900 --- /dev/null +++ b/vespajlib/src/main/java/com/yahoo/collections/Optionals.java @@ -0,0 +1,54 @@ +package com.yahoo.collections; + +import com.google.common.collect.Comparators; + +import java.util.Optional; +import java.util.function.BinaryOperator; + +/** + * @author jonmv + */ +public class Optionals { + + private Optionals() { } + + /** Returns the first non-empty optional, or empty if all are empty. */ + @SafeVarargs + public static <T> Optional<T> firstNonEmpty(Optional<T>... optionals) { + for (Optional<T> optional : optionals) + if (optional.isPresent()) + return optional; + return Optional.empty(); + } + + /** Returns the non-empty optional with the lowest value, or empty if all are empty. */ + @SafeVarargs + public static <T extends Comparable<T>> Optional<T> min(Optional<T>... optionals) { + Optional<T> best = Optional.empty(); + for (Optional<T> optional : optionals) + if (best.isEmpty() || optional.isPresent() && optional.get().compareTo(best.get()) < 0) + best = optional; + return best; + } + + /** Returns the non-empty optional with the highest value, or empty if all are empty. */ + @SafeVarargs + public static <T extends Comparable<T>> Optional<T> max(Optional<T>... optionals) { + Optional<T> best = Optional.empty(); + for (Optional<T> optional : optionals) + if (best.isEmpty() || optional.isPresent() && optional.get().compareTo(best.get()) > 0) + best = optional; + return best; + } + + /** Returns whether either optional is empty, or both are present and equal. */ + public static <T> boolean equalIfBothPresent(Optional<T> first, Optional<T> second) { + return first.isEmpty() || second.isEmpty() || first.equals(second); + } + + /** Returns whether the optional is empty, or present and equal to the given value. */ + public static <T> boolean emptyOrEqual(Optional<T> optional, T value) { + return optional.isEmpty() || optional.equals(Optional.of(value)); + } + +} |