我希望找到一种简洁高效的方法,将一个消费者应用于非并行流的一个元素,而不关闭该流。
我的意思是,我想替换
AtomicBoolean firstOneDone = new AtomicBoolean();
lines.forEach(line -> {
if (!firstOneDone.get()) {
// handle first line
firstOneDone.set(true);
} else {
// handle any other line
}
})
与某物相似
lines.forFirst(header -> {
// handle first line
}).forEach(line -> {
// handle any other line
})
我不想对整个流进行两次操作(复制或重新创建流,peek
等),也不想将布尔值/测试移动到另一个位置,比如函数包装器。
这种部分读取的方式是否可行,还是说流的基本模型与此不兼容?
filter
和findFirst
会导致检查Stream的所有元素,而这并不是必要的(甚至对于无限流也不起作用);-) - Alexis C.