Странные циклы, используемые в Spliterator of Java 8

Кто-нибудь знает, почему java.util.Spliterator реализация использует циклы do-while, а не while, когда тело цикла пустое? Например, реализация forEachRemaining является:

default void forEachRemaining(Consumer<? super T> action) {
    do { } while (tryAdvance(action));
}

Зачем им использовать

do { } while (tryAdvance(action));

вместо

while(tryAdvance(action));

?

Есть ли какие-то преимущества, о которых я не знаю?

1 ответ

Проверка логики выполняется после тела do{}. Это может быть использовано многими способами, но делает то же самое, что и цикл while с проверкой логики в конце. Поскольку do {} пуст, поток будет ждать до получения уведомления, а затем выполнить логическую проверку, а не выполнять логическую проверку, а затем при истинном ожидании.

Другие вопросы по тегам