code: public static <T, R> ObjectBinding<R> reduceAndMap(final ObservableList<T> items, final ObservableValue<BinaryOperator<T>> reducer, final ObservableValue<Function<T, R>> mapper, final Supplier<T> supplier) {
          return Bindings.createObjectBinding(() -> mapper.getValue().apply(items.stream().reduce(reducer.getValue()).orElseGet(supplier)), items, reducer, mapper);
      }
docs: Returns an object binding whose value is the mapped 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.
  @param mapper   a non-interfering, stateless function to apply to the reduced value.
  
  @return an object binding