Als*_*esh 12 java java-8 java-stream
我正在使用这样的代码来处理由多行组成的文件:
BufferedReader reader = ...
reader.lines().forEach(Same common Action)
Run Code Online (Sandbox Code Playgroud)
只要每条线都需要以相同的方式处理,这种方法就可以正常工作.但有时可能会有几种不同的行为.
例如,假设第一行是标题,其他行是内容.对于我想要执行的第一行Action1,以及我想要的其他行Action2.
在Java 7风格中,我会做这样的事情:
String line;
boolean first = true;
while ( (line = reader.readLine()) != null) {
if (first) {
action1(line);
first = false;
} else {
action2(line);
}
}
Run Code Online (Sandbox Code Playgroud)
但那是复杂而丑陋的,根本就没有使用流.如何使用Java 8流以惯用的方式做到这一点?
Eug*_*ene 21
Spliterator<String> sp = reader.lines().spliterator();
sp.tryAdvance(YourConsumer)
sp.forEachRemaning(DifferentConsumer)
Run Code Online (Sandbox Code Playgroud)
不要让你的生活如此艰难:
String header = reader.readLine();
if(header != null) {
action1(header);
reader.lines().forEach(line -> action2(line));
}
Run Code Online (Sandbox Code Playgroud)
或者如果您已经执行了Consumer<String>以下操作:
String header = reader.readLine();
if(header != null) {
action1.accept(header);
reader.lines().forEach(action2);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
521 次 |
| 最近记录: |