有条件地从流中删除第一个(索引为零)元素

gst*_*low 8 java java-stream java-11

我有以下代码:

Stream<String> lines = reader.lines();
Run Code Online (Sandbox Code Playgroud)

如果第一个字符串等于"email"我要从流中删除第一个字符串。对于流中的其他字符串,我不需要此检查。

我怎么能做到?

聚苯乙烯

当然,我可以将其转换为列表,然后使用旧式进行循环,但是进一步,我需要再次播放流。

Hol*_*ger 6

虽然在从阅读器构造出一行流之后,阅读器将处于未指定状态,但在执行此操作之前,阅读器处于定义良好的状态。

所以你可以做

String firstLine = reader.readLine();
Stream<String> lines = reader.lines();
if(firstLine != null && !"email".equals(firstLine))
    lines = Stream.concat(Stream.of(firstLine), lines);
Run Code Online (Sandbox Code Playgroud)

我认为这是最干净的解决方案。请注意,这与Java 9不同dropWhile,如果Java 9相匹配,它们将掉落多行。