Странный сценарий, где я пропускаю элемент при использовании ResultSet Java внутри лямбды - PullRequest
1 голос
/ 14 октября 2019

Мой ResultSet пропускает элемент, когда я перебираю результат внутри лямбда-функции и присваиваю результаты переменной вне лямбда-функции. Но то же самое прекрасно работает, когда я объявляю переменную внутри лямбда-функции, добавляю значения к ней и возвращаю ее как часть функции.

Я попытался поместить переменную count и проверить оба сценария, чтобы увидеть, сколько разцикл пока запущен, и я подтвердил, что он работает на один меньше.

Map<String,String> map = new HashMap<>();
getTemplate.query("Some Query that returns 38251 elements", (ResultSet rs) -> {
     int count = 0;
     while(rs.next()) {
         count++;
         map.put(rs.getString("val"),rs.getString("val2"));
    }
   //count here is 38250
});
map.size() -> 38250 //Missing 1 element

Но когда я делаю это

Map<String,String> correct = getTemplate.query("Some Query that returns 38251 elements", (ResultSet rs) -> {    
     Map<String,String> map = new HashMap<>();
     int count = 0;
     while(rs.next()) {
         count++;
         map.put(rs.getString("val"),rs.getString("val2"));
    }
   //count here is 38251
   return map;
});
correct.size() // 38251 elements
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...