/** * Creates an instance with the supplied value. */ public static <T> Alternative<T> preferred(final T value) { return new Alternative<>(value); }
private static String getRemoteAddress(final HttpServletRequest request) { return Alternative.preferred(request.getHeader(HEADER_NAME_X_FORWARDED_FOR)) .alternatively(() -> request.getHeader(HEADER_NAME_Y_RA)) .alternatively(() -> request.getHeader(HEADER_NAME_YAHOOREMOTEIP)) .alternatively(() -> request.getHeader(HEADER_NAME_CLIENT_IP)) .orElseGet(request::getRemoteAddr); }
/** * Returns itself (unchanged) iff current value != null, * otherwise returns a new instance with the value supplied by the supplier. */ public Alternative<T> alternatively(final Supplier<? extends T> supplier) { if (value != null) { return this; } return new Alternative<>(supplier.get()); }