Любой совет, как улучшить мою реализацию? - PullRequest
1 голос
/ 26 апреля 2019

это часть моего кода ниже.Когда я использую цикл 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 ]

1 голос
/ 26 апреля 2019

Вы должны быть осторожны, какие числа в цикле или потоке включены, а какие нет.

Обратите внимание, что первое число всегда включительно, и, поскольку вы выполняете цикл с 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));
}
1 голос
/ 26 апреля 2019

Вы можете использовать IntStream.range(1, rsmeta.getColumnCount()+1), что даст вам номера столбцов, начиная с 1 до общего количества.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...