package edu.stanford.nlp.trees; import java.io.IOException; import java.util.function.Predicate; /** * A <code>FilteringTreeReader</code> filters the output of another TreeReader. * It applies a Filter<Tree> to each returned tree and only returns trees * that are accepted by the Filter. The Filter should accept trees that it * wants returned. * * @author Christopher Manning * @version 2006/11 */ public class FilteringTreeReader implements TreeReader { private TreeReader tr; private Predicate<Tree> f; public FilteringTreeReader(TreeReader tr, Predicate<Tree> f) { this.tr = tr; this.f = f; } /** * Reads a single tree. * * @return A single tree, or <code>null</code> at end of file. */ public Tree readTree() throws IOException { Tree t; do { t = tr.readTree(); } while (t != null && ! f.test(t)); return t; } /** * Close the Reader behind this <code>TreeReader</code>. */ public void close() throws IOException { tr.close(); } }