这是我下面代码的一部分。当我使用 for 循环(注释掉)时 - 它有效。当我使用这个流时 - 它有点工作,但随后在我从未期望过的方法上表现得很糟糕。
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));
// }
我猜我的实现是错误的。有什么建议如何改进这里吗?谢谢!
最佳答案
您必须小心循环或流式传输中包含哪些数字以及不包含哪些数字。
-
IntStream::range(int startInclusive, int endExclusive)
匹配间隔<a, b)
-
IntStream::rangeClosed(int startInclusive, int endInclusive)
匹配间隔<a, b>
请注意,第一个数字始终包含在内,因为您从 1
循环,您想要启动Stream
来自1
还有:
IntStream.range(1, rsmeta.getColumnCount()).forEach(i -> {
// ...
});
最后,Stream
的好处这里的用法是相当有问题的。事实上,根本没有任何好处。我强烈建议坚持使用 for-loop
在此用例中:
for (int column = 1; column <= columnCount; column++) {
columnNames.add(rsmeta.getColumnName(column));
}
关于java - 关于如何改进我的实现有什么建议吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55864975/