很抱歉出现基本问题... 我有一个函数,该函数接受带有文件内容的InputStream并返回对象列表,比如说Person。
输入文件的每一行都包含一个人,因此我想按行对其进行解析。 没什么难的,但是...这次我想使用反应式编程。
类似:
public List<Person> parse(final InputStream is) throws IOException {
return
//create an observable wich will split the input in many lines, "\n"
.map(Person::new)
.collect(toList());
}
我错过了注释的步骤,即创建一个不是基于字节而是基于行的可观察对象。
答案 0 :(得分:3)
您可以使用stream
的方法lines
创建String
的{{1}}:
返回一个
BufferedReader
,其元素是从该Stream
读取的行。
具有与此类似的代码:
BufferedReader
所以您的代码应类似于:
Stream<String> lines = new BufferedReader(new InputStreamReader(is, cs)).lines();
答案 1 :(得分:1)
根据您的代码,您无需实现行的Observable,因为您以后希望使用Java的Streams。您不能从Rx移回Java流。
但是,如果您想完全基于Observables,则可以从以下内容开始:
try (BufferedReader reader = new BufferedReader(new InputStreamReader(is))) {
Observable<String> linesObs = Observable.from(reader.lines()::iterator);
...
}