我正在使用jdbcTemplate查询配置单元,然后将结果写入.csv文件。我基本上只是生成一个对象列表,然后蒸一下列表以将每个记录写入文件。我希望将结果从配置单元返回时进行流处理,然后将其写入文件中,而不是等待整个过程然后进行处理。谁能指出我正确的方向?谢谢!
private List<Avs> queryAvsData(String asSql) {
List<Avs> llistAvs = new ArrayList<Avs>();
List<Map<String, Object>> rows = hiveJdbcTemplate.queryForList(asSql);
Iterator<Map<String, Object>> it = rows.iterator();
while (it.hasNext()) {
Map<String, Object> row = it.next();
Avs laAvs = Avs.builder()
.make((String) row.get("make"))
.model((String) row.get("model"))
.build();
llistAvs.add(laAvs);
}
return llistAvs;
}
看起来没有内置的解决方案,但是您可以做到这一点。基本上,您将现有功能包装在迭代器中,然后使用拆分器将其转换为流。 Here's a blog post on the subject:
该代码实现Spring的ResultSetExtractor接口,这是一个单一抽象方法(SAM)接口,允许使用lambda表达式来实现它。
该实现将SQL ResultSet包装在迭代器中,使用Spliterators和StreamSupport实用工具类构造流,并将其应用于采用行集流并返回通用结果的Function。