docs: public static Batch batchFilteredWith( final Batch batch,
                                             final RowFilter filter ) {
          if (batch == null || batch.isEmpty() || batch.rowCount() == 0 || filter == null || batch.width() < 1) return batch;
          return new Batch() {
              private boolean atNext = false;
  
              @Override
              public int width() {
                  return batch.width();
              }
  
              @Override
              public boolean isEmpty() {
                  return batch.isEmpty();
              }
  
              @Override
              public String getWorkspaceName() {
                  return batch.getWorkspaceName();
              }
  
              @Override
              public long rowCount() {
                  return -1L;
              }
  
              @Override
              public CachedNode getNode() {
                  return batch.getNode();
              }
  
              @Override
              public CachedNode getNode( int index ) {
                  return batch.getNode(index);
              }
  
              @Override
              public float getScore() {
                  return batch.getScore();
              }
  
              @Override
              public float getScore( int index ) {
                  return batch.getScore(index);
              }
  
              @Override
              public boolean hasNext() {
                  return findNext();
              }
  
              @Override
              public void nextRow() {
                  if (findNext()) {
                      atNext = false;
                      return;
                  }
                  throw new NoSuchElementException();
              }
  
              private boolean findNext() {
                  if (!atNext) {
                      while (batch.hasNext()) {
                          batch.nextRow();
                          // See if the batch's current row satisfies the filter ...
                          if (filter.isCurrentRowValid(batch)) {
                              atNext = true;
                              break;
                          }
                      }
                  }
                  return atNext;
              }
  
              @Override
              public String toString() {
                  return "(filtered-batch " + filter + " on " + batch + ")";
              }
          };
      }