我有一个包含表的行的Stream.第一行包含标题行,应该以不同的方式处理.然后,应以标准方式处理其余行.
我不想跳过标题行,因为我需要该行的信息.天真的解决方案应该是这样的:
Stream<Row> rows = ...;
Row headRow = rows.<what comes here?>;
rows.forEach( this::processRow );
但这显然是不可能的.我能想到的最接近的就是:
Stream<Rows> rows = ...;
AtomicReference<Row> headRow = new AtomicReference<>();
rows.takeWhile(r -> {
if (headRow().get()==null) {
headRow.set(r);
return true;
}
return false;
})
.forEach( this::processRow );
这应该行得通,但IMHO有点尴尬.
有人知道如何更好地解决这个问题吗?(它应该可以在Java 17上运行,而不需要像guava这样的附加库.)
注意:首先使用Collect()创建列表,处理标题行,然后转换回流并跳过第一个元素,但我认为这不是一个好的解决方案,因为它需要更多的内存(因为所有元素都必须同时保存在内存中).