code: public StreamEx<T> collapse(BiPredicate<? super T, ? super T> collapsible, BinaryOperator<T> merger) {
          return collapseInternal(collapsible, Function.identity(), merger, merger);
      }
docs: Merge series of adjacent elements which satisfy the given predicate using
  the merger function and return a new stream.
  
  <p>
  This is a <a href="package-summary.html#StreamOps">quasi-intermediate</a>
  partial reduction operation.
  
  <p>
  This operation is equivalent to
  {@code collapse(collapsible, Collectors.reducing(merger)).map(Optional::get)}
  , but more efficient.
  
  @param collapsible a non-interfering, stateless predicate to apply to the
  pair of adjacent elements of the input stream which returns true
  for elements which are collapsible.
  @param merger a non-interfering, stateless, associative function to merge
  two adjacent elements for which collapsible predicate returned
  true. Note that it can be applied to the results if previous
  merges.
  @return the new stream
  @since 0.3.1