编写一个介于charstreams输入供应器和输出供应器之间的过滤器

时间:2013-01-08 08:50:59

标签: java design-patterns guava

我想编写一个grep类型过滤器,它将一个Guava Charstreams InputSupplier作为输入,并使用Charstreams OutputSupplier作为其输出。如果它们满足特定的正则表达式,它应该只将输入供应器中的行传递给输出供应器。

这样做的正确设计模式/ paradim是什么?

我猜你会像这样做过滤器:

InputSupplier<InputStreamReader> ris = CharStreams.newReaderSupplier(....
CharStreams.readLines(ris, new LineProcessor<....

并实现LineProcessor方法。

但是LineProcessor.getResult()应该返回什么 - 只是失败的成功?我应该在周围的功能中使用“最终”输出供应商吗?

或者我完全使用错误的api /方法!!

非常感谢一些伪代码以展示最佳方式。

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

CharStreams.readLines返回List<String>。所以根据源代码,它要求LineProcessor累积行,然后返回结果。在我看来,你的LineReader可以是下面的东西

new LineProcessor<List<String>>() {

    List<String> result = Lists.newArrayList();

    public boolean processLine(String line) {
      if (line matches regex){
        result.add(line.trim());
      }

      return true;//continue processing

    }

    public List<String> getResult() {return result;}

  });