code: public <R> R removeMany(boolean nullify, int max_results, Predicate<T> filter,
                              Supplier<R> result_creator, BiConsumer<R,T> accumulator) {
          lock.lock();
          try {
              Remover<R> remover=new Remover<>(nullify, max_results, filter, result_creator, accumulator);
              forEach(hd+1, hr, remover);
              return remover.getResult();
          }
          finally {
              lock.unlock();
          }
      }
docs: Removes elements from the table and adds them to the result created by result_creator. Between 0 and max_results
  elements are removed. If no elements were removed, processing will be set to true while the table lock is held.
  @param nullify if true, the x,y location of the removed element in the matrix will be nulled
  @param max_results the max number of results to be returned, even if more elements would be removable
  @param filter a filter which accepts (or rejects) elements into the result. If null, all elements will be accepted
  @param result_creator a supplier required to create the result, e.g. ArrayList::new
  @param accumulator an accumulator accepting the result and an element, e.g. ArrayList::add
  @param <R> the type of the result
  @return the result