{"record":{"id":"ce7ddf98384eeb9b","repo":"stanfordnlp/CoreNLP","slug":"crossvalidationiterator-doesn-t-support-remove","errorCode":null,"errorMessage":"CrossValidationIterator doesn't support remove()","messagePattern":"CrossValidationIterator doesn't support remove\\(\\)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"src/edu/stanford/nlp/classify/CrossValidator.java","lineNumber":70,"sourceCode":"    double sum = 0;\n    Iterator<Triple<GeneralDataset<L, F>,GeneralDataset<L, F>,SavedState>> foldIt = iterator();\n    while (foldIt.hasNext()) {\n      sum += function.applyAsDouble(foldIt.next());\n    }\n    return sum / kFold;\n  }\n\n\n  class CrossValidationIterator implements Iterator<Triple<GeneralDataset<L, F>,GeneralDataset<L, F>,SavedState>> {\n\n    private int iter = 0;\n\n    @Override\n    public boolean hasNext() { return iter < kFold; }\n\n    @Override\n    public void remove() {\n      throw new UnsupportedOperationException(\"CrossValidationIterator doesn't support remove()\");\n    }\n\n    @Override\n    public Triple<GeneralDataset<L, F>,GeneralDataset<L, F>,SavedState> next() {\n      if (iter == kFold) throw new NoSuchElementException(\"CrossValidatorIterator exhausted.\");\n      int start = originalTrainData.size() * iter / kFold;\n      int end = originalTrainData.size() * (iter + 1) / kFold;\n      //Logging.logger(this.getClass()).info(\"##train data size: \" +  originalTrainData.size() + \" start \" + start + \" end \" + end);\n      Pair<GeneralDataset<L, F>, GeneralDataset<L, F>> split = originalTrainData.split(start, end);\n\n      return new Triple<>(split.first(), split.second(), savedStates[iter++]);\n    }\n\n  } // end class CrossValidationIterator\n\n\n  public static class SavedState {\n    public Object state;","sourceCodeStart":52,"sourceCodeEnd":88,"githubUrl":"https://github.com/stanfordnlp/CoreNLP/blob/1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a/src/edu/stanford/nlp/classify/CrossValidator.java#L52-L88","documentation":"UnsupportedOperationException raised by CrossValidator.CrossValidationIterator.remove(). Folds are precomputed, read-only views of the dataset, so mutation through the Iterator contract is deliberately unsupported; it fires only if code calls remove() while iterating folds.","triggerScenarios":"Thrown at src/edu/stanford/nlp/classify/CrossValidator.java:70 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Do not call remove() on the cross-validation iterator","Mutate the underlying dataset directly instead of through the iterator","Wrap iteration in code that only reads folds"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a","analyzedAt":"2026-09-10T02:24:07.274Z","contentChangedAt":"2026-09-10T02:24:07.274Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}