任何建议如何改善我的实施?

时间:2019-04-26 09:48:22

标签: java spring java-stream

这是下面我的代码的一部分。当我使用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));
//      }

猜猜我只是实现错误。任何建议如何在这里改善?谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用IntStream.range(1, rsmeta.getColumnCount()+1),它会为您提供从1到总计数的列号。

答案 1 :(得分:1)

您必须小心,包括循环或流式传输中的哪些数字,不包括哪些数字。

请注意,第一个数字始终包含在内,由于您从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));
}