Javaでは、(文字の代わりに)オブジェクトをプルReaderすることで機能するの抽象バージョンはです。Iterator
問題は、オブジェクト(つまりインターフェイス)の抽象的なバージョンAppendableまたはWriterどこにプッシュできるかということです。
以前は、次のような独自のインターフェイスを作成していました。
public interface Pusher<T> {
    public void push(T o);
}
誰かが知っているほとんどの環境で利用できる汎用インターフェースはありますか?それは理にかなっているので、上記のインターフェースを作成し続ける必要はありませんか?
アップデート:
これが役立つ場所の例です。
public void findBadCategories(final Appendable a)  {
    String q = sql.getSql("product-category-bad");
    jdbcTemplate.query(q, new RowCallbackHandler() {
        @Override
        public void processRow(ResultSet rs) throws SQLException {
            String id = rs.getString("product_category_id");
            String name = rs.getString("category_name");
            if (! categoryMap.containsKey(id)) {
                try {
                    a.append(id + "\t" + name + "\n");
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    });
}
ここを使用してAppendableいますが、Pusherコールバックが必要です。Java 8がリリースされたら、クロージャを使用するだけですが、そのクロージャにはまだインターフェイスが必要です。
最後に、私が以前に選択した他のオプションは、GuavaPredicateまたはFunction(さらに悪いように見えますが)に完全に違反することです。これらはべき等であることを目的としているため、契約違反です(ただし、true常に戻ってきた場合は...)。
ただし、Guavaが提供するのは、 AbstractIteratorのおかげでPythonのジェネレーターに類似したものです。
私はGuavaに拡張機能の問題を追加しましたが、そのような基本的なものを追加するのは実際には彼らの仕事ではないことに同意します。