1

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

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

我猜你会做这样的线路过滤器:

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

并实现 LineProcessor 方法。

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

还是我使用了完全错误的 api/方法!!

一些伪代码来演示最好的方法将不胜感激。

感谢您的建议。

4

1 回答 1

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

  });
于 2013-01-11T08:36:20.123 回答