我有一个来自使用Spring data JPA的数据库的数据流,它需要被Json序列化并写入http响应,而不需要存储在内存中.这是示例代码.
try (Stream<Employee> dataStream = empRepo.findAllStream()) {
response.setHeader("content-type", "application/json");
PrintWriter respWriter = response.getWriter();
respWriter.write("["); // array begin
dataStream.forEach(data -> {
try {
respWriter.write(jsonSerialize(data));
respWriter.write(",");
} catch (JsonProcessingException e) {
log(e);
}
entityManager.detach(data);
});
respWriter.write("]"); // array end
respWriter.flush();
} catch (IOException e) {
log(e);
}
}
但此逻辑将在最后一个元素之后写入额外的comma.如果它是最后一个元素,我怎么能不做respWriter.write(",");
呢?
有流运算符的解决方案-peek
、reduce
等,但最优化的解决方案是什么?有没有像Stream.hasNext()
这样的东西,以便我可以在forEach
中使用if
条件?