public static <T1, T2, T3, T4, R> R getOrElseGet(final T1 value,
                                                     final Function<T1, T2> getter1,
                                                     final Function<T2, T3> getter2,
                                                     final Function<T3, T4> getter3,
                                                     final Function<T4, R> getter4,
                                                     final Supplier<R> otherSupplier) {
        return requireNonNullElseGet(get(value, getter1, getter2, getter3, getter4), otherSupplier);
    }
Apply getter to value if value is non-null. If value or the result of
applying getter to value is null, return the value supplied by otherSupplier.
stroom-util-shared/src/main/java/stroom/util/shared/NullSafe.java