code: @Override
      public synchronized boolean hasNext() {
  
          resetToLastKey();
  
          if (mIsFirst) {
              mIsFirst = false;
  
              // evaluate expression
              filter();
  
              return true;
          } else {
  
              // only the first call yields to true, all further calls will yield
              // to
              // false. Calling hasNext() makes no sense, since evaluating the
              // expression on the same input would always return the same result.
              resetToStartKey();
              return false;
          }
  
      }
docs: {@inheritDoc}