code: public static <T, R> ObjectBinding<R> reduceAndMap(final ObservableList<T> items, final T defaultValue, final ObservableValue<BinaryOperator<T>> reducer, final ObservableValue<Function<T, R>> mapper) {
          return Bindings.createObjectBinding(() -> mapper.getValue().apply(items.stream().reduce(reducer.getValue()).orElse(defaultValue)), 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 defaultValue the value to be returned if there is no value present, may be null.
  @param reducer      an associative, non-interfering, stateless function for combining two values.
  @param mapper       a non-interfering, stateless function to apply to the reduced value.
  
  @return an object binding