@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;
        }

    }
@ Override public synchronized boolean hasNext ( ) { resetToLastKey ( ) ; if ( mIsFirst ) { mIsFirst = false ; filter ( ) ; return true ; } else { resetToStartKey ( ) ; return false ; } }
{@inheritDoc}