我想编写一个grep类型过滤器,它将一个Guava Charstreams InputSupplier作为输入,并使用Charstreams OutputSupplier作为其输出。如果它们满足特定的正则表达式,它应该只将输入供应器中的行传递给输出供应器。
这样做的正确设计模式/ paradim是什么?
我猜你会像这样做过滤器:
InputSupplier<InputStreamReader> ris = CharStreams.newReaderSupplier(....
CharStreams.readLines(ris, new LineProcessor<....
并实现LineProcessor方法。
但是LineProcessor.getResult()应该返回什么 - 只是失败的成功?我应该在周围的功能中使用“最终”输出供应商吗?
或者我完全使用错误的api /方法!!
非常感谢一些伪代码以展示最佳方式。
感谢您的建议。
答案 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;}
});