Пройдемся по листу

Mar 04, 2015 16:58

Java:

Iterator iterator = batch.iterator();
while (iterator.hasNext()) {
message = iterator.next();
    iterator.remove();
}
return message;

(batch - List)

Leave a comment

Comments 6

dark_barker March 5 2015, 09:30:26 UTC
ну а что, очистить и вернуть последний, не?) тока, емнип, тут неопределённое поведение в общем случае.

Reply

redis March 5 2015, 10:00:44 UTC
Да вроде как определенное, нашли в продакшене, когда обнаружили, что всегда процессим только последний батч (там на самом деле другие имена переменных).

Кусок кода очищает коллекцию и возвращает последний элемент, да. Он не должен этого делать, но делает, причем весьма странным способом

Reply

dark_barker March 5 2015, 11:12:43 UTC
> Он не должен этого делать

дык тогда в чём ошибка в этом коде то? не могу придумать что тут можно изменить, чтобы он делал что-то полезное в таком случае. ну т.е. задумано что было этим кодом?

ну и насчёт неопределённости - действительно, тупанул чего-то спросони, всё норм так можно делать.

Reply

redis March 5 2015, 11:28:36 UTC
Если убрать while, он будет делать то, что должен был делать - брать первое сообщение из батча, удалять его из коллекции и посылать на процессинг.

Ну а в текущем виде вполне себе WTF :)

Программист ржал в голос со своего кода и пытался понять, как у него такое получилось, а сейчас жадно читает комменты :)

Reply


b0rg March 5 2015, 09:36:09 UTC
так там же вроде прикрутили фигни типа Lynq .NET или нет?

Reply


Leave a comment

Up