这是下面我的代码的一部分。当我使用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));
// }
猜猜我只是实现错误。任何建议如何在这里改善?谢谢!
答案 0 :(得分:1)
您可以使用IntStream.range(1, rsmeta.getColumnCount()+1)
,它会为您提供从1到总计数的列号。
答案 1 :(得分:1)
您必须小心,包括循环或流式传输中的哪些数字,不包括哪些数字。
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));
}