docs: protected void removeAndProcess(Collection<R> requests) {
          try {
              Collection<R> removed=new ArrayList<>();
              Iterator<R> it=requests.iterator();
              R first_req=it.next();
              removed.add(first_req);
              it.remove();
  
              while(it.hasNext()) {
                  R next=it.next();
                  if(req_matcher.test(first_req, next)) {
                      removed.add(next);
                      it.remove();
                  }
                  else
                      break;
              }
              req_processor.accept(removed);
          }
          catch(Throwable t) {
              log().error("failed processing requests", t);
          }
      }