我正在用Java8为一个文件编写一个解析器。使用files.lines
读取该文件,并返回一个顺序的流
。
每一行都映射到一个数据对象result
,如下所示:
Result parse(String _line) {
// ... code here
Result _result = new Result().
if (/* line is not needed */) {
return null;
} else {
/* parse line into result */
return _result;
}
}
现在我们可以将流中的每一行映射到相应的结果:
public Stream<Result> parseFile(Path _file) {
Stream<String> _stream = Files.lines(_file);
Stream<Result> _resultStream = _stream.map(this::parse);
}
但是,流现在包含要删除的null
值:
parseFile(_file).filter(v -> v != null);
如我在parseline/_stream.map
中所知,如果需要结果,我如何组合映射/筛选操作?
正如注释中已经指出的,流将在一次传递中处理,因此实际上不需要更改任何内容。为此,您可以使用flatmap
并让parse
返回一个流:
Stream<Result> parse(String _line) {
.. code here
Result _result = new Result().
if (/* line is not needed */) {
return Stream.empty();
} else {
/** parse line into result */
return Stream.of(_result);
}
}
public Stream<Result> parseFile(Path _file) {
return Files.lines(_file)
.flatMap(this::parse);
}
这样,首先就不会有任何null
值。
假设我有一张房间清单 每个房间都有一份人员名单。 使用java8 streams,我想迭代房间列表,获取所有人员,在每个节点上执行一些方法(doSomething()),并获取所有过滤对象的列表。 这是使用java 8的最佳实践吗?
有可能在流中过滤更多次吗?例如,如果我有一个带有ID的列表,我想流一个HashMap,并将HashMap的键映射到列表中的键,以及它们在哪里匹配,我想从HashMap中获取对象,并再次过滤它,例如该对象中的int字段大于3,并在最后求和。例如,如果它发现10种情况,其中列表的键和HashMap的键相等,它过滤这10种情况,并发现3种情况,例如int字段大于3,它最终返回这些的总和。 到目前为止,这
我正在从文件中读取值并获取列表。如下- 一旦我得到这个
我刚开始使用RxJava/RxAndroid,在理解如何正确处理背压方面有一些问题。 我有一个文件扫描器,可以扫描目录并发出文件。应尽快处理这些文件,并且不跳过任何文件。 所以管道看起来像这样:<代码>可观察 不幸的是,我收到了rx。例外情况。缺少背压异常错误。所以我读了关于背压的书,如果我理解正确的话,无损耗选项只是缓冲区和窗口。 我试过了BackPressureBuffer()、buffer(
如何使用java8流和过滤器过滤嵌套循环? 假设我有一个汽车列表(
我需要将Java转换为的实例(包括映射内容) 我应该用什么来代替来使此代码可编译?