public static <T> ObjectBinding<T> reducing(final ObservableList<T> items, final ObservableValue<BinaryOperator<T>> reducer, final Supplier<T> supplier) {
        return Bindings.createObjectBinding(() -> items.stream().reduce(reducer.getValue()).orElseGet(supplier), items, reducer);
    }
public static < T > ObjectBinding < T > reducing ( final ObservableList < T > items , final ObservableValue < BinaryOperator < T > > reducer , final Supplier < T > supplier ) { return Bindings . createObjectBinding ( ( ) -> items . stream ( ) . reduce ( reducer . getValue ( ) ) . orElseGet ( supplier ) , items , reducer ) ; }
Returns an object binding whose value is the reduction of all elements in the list.

@param items    the observable list of elements.
@param reducer  an associative, non-interfering, stateless function for combining two values.
@param supplier a {@code Supplier} whose result is returned if no value is present.

@return an object binding