Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编写介于charstreams inputsupplier和outputsupplier之间的筛选器_Java_Design Patterns_Guava - Fatal编程技术网

Java 编写介于charstreams inputsupplier和outputsupplier之间的筛选器

Java 编写介于charstreams inputsupplier和outputsupplier之间的筛选器,java,design-patterns,guava,Java,Design Patterns,Guava,我想编写一个grep类型的过滤器,它将Guava Charstreams InputSupplier作为输入,并使用Charstreams OutputSupplier作为输出。如果行满足特定的正则表达式,它应该只将行从inputsupplier传递到outputsupplier 这样做的正确设计模式/模式是什么 我猜你会这样做线过滤器: InputSupplier<InputStreamReader> ris = CharStreams.newReaderSupplier(....

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

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

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

InputSupplier<InputStreamReader> ris = CharStreams.newReaderSupplier(....
CharStreams.readLines(ris, new LineProcessor<....
以及实现LineProcessor方法

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

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

如果能用一点伪代码来演示最好的方法,我们将不胜感激

谢谢您的建议。

返回列表。因此,根据源代码,它要求LineProcessor累积行数,然后返回结果。在我看来,您的读线器可以是如下内容

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

  });

谢谢-但正如问题所提到的,我希望输出转到outputsupplier,这意味着代码不应该在内存中累积结果。输出可能是1GB的文本-所以我正在寻找更像过滤器的东西。您还可以使CharStreams.Readlines返回您想要的任何类/类型-这取决于您如何声明LineProcesser