这是我下面代码的一部分。当我使用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));
// }我想我的实现是错的。这里有什么改进的建议吗?谢谢!
发布于 2019-04-26 10:03:26
您必须小心循环或流中包含的数字和不包含的数字。
IntStream::range(int startInclusive, int endExclusive)匹配间隔<a, b)IntStream::rangeClosed(int startInclusive, int endInclusive)匹配间隔<a, b>注意,第一个数字总是包含在内的,因为您从1循环,所以您也希望从1启动Stream:
IntStream.range(1, rsmeta.getColumnCount()).forEach(i -> {
// ...
});最后,这里使用Stream的好处是值得怀疑的。实际上,根本没有的好处。我强烈建议在这个用例中坚持使用for-loop:
for (int column = 1; column <= columnCount; column++) {
columnNames.add(rsmeta.getColumnName(column));
}发布于 2019-04-26 10:02:06
您可以使用IntStream.range(1, rsmeta.getColumnCount()+1),这将给出从1开始到总计数的列号。
https://stackoverflow.com/questions/55864975
复制相似问题