Java 如何改进我的实施有什么建议吗?
这是我下面代码的一部分。当我使用for循环(注释掉)时,它可以工作。当我使用这个流时,它有点工作,但在一个我从未预料到的方法上表现糟糕Java 如何改进我的实施有什么建议吗?,java,spring,java-stream,Java,Spring,Java Stream,这是我下面代码的一部分。当我使用for循环(注释掉)时,它可以工作。当我使用这个流时,它有点工作,但在一个我从未预料到的方法上表现糟糕 Spravochnik spr = new Spravochnik(); ResultSetMetaData rsmeta = rs.getMetaData(); List<String> columnNames = new ArrayList<>(); List<Li
Spravochnik spr = new Spravochnik();
ResultSetMetaData rsmeta = rs.getMetaData();
List<String> columnNames = new ArrayList<>();
List<List<String>> valuesInRows = new ArrayList<List<String>>();
int columnCount = rsmeta.getColumnCount();
IntStream.range(0, rsmeta.getColumnCount()).forEach(i -> {
try {
columnNames.add(rsmeta.getColumnName(i));
} catch (SQLException e) {
e.printStackTrace();
}
});
// for(int column = 1; column <= columnCount; column++){
// columnNames.add(rsmeta.getColumnName(column));
// }
Spravochnik spr=新的Spravochnik();
ResultSetMetaData rsmeta=rs.getMetaData();
List columnNames=新建ArrayList();
列表值行=新的ArrayList();
int columnCount=rsmeta.getColumnCount();
IntStream.range(0,rsmeta.getColumnCount()).forEach(i->{
试一试{
add(rsmeta.getColumnName(i));
}捕获(SQLE异常){
e、 printStackTrace();
}
});
//对于(int column=1;column您可以使用IntStream.range(1,rsmeta.getColumnCount()+1)
,它将为您提供从1开始到总计数的列数。您必须小心循环或流中包含哪些数字,哪些数字不包含
- 匹配间隔
匹配间隔
注意:第一个数字总是包含在内的,因为您从1
循环,所以您也希望从1
启动流:
IntStream.range(1, rsmeta.getColumnCount()).forEach(i -> {
// ...
});
最后,这里使用流
的好处是值得怀疑的。实际上,没有任何好处。我强烈建议在这个用例中坚持使用for循环
:
for (int column = 1; column <= columnCount; column++) {
columnNames.add(rsmeta.getColumnName(column));
}
for(int column=1;column显然在流中,从0开始,而在for循环中,从1开始。在ResultSet中,列从1索引。IntStream.rangeClosed(1,rsmeta.getColumnCount())
是否可以像那样动态创建columnNames列表,不仅仅是填充?是否可以改进?最好是….map(i->rsmeta.getColumnName(i)).collect(Collectors.toList());
。但是,我现在不确定我是否明白你的问题。列表columnNames=IntStream.rangeClosed(1,rsmeta.getColumnCount()).map(i->rsmeta.getColumnName(i)).collect(Collectors.toList());
说类型不匹配不能从字符串到int…我需要使用getColumnName内的索引…如果这是一个门槛,很抱歉,我刚刚开始学习streams