метод forEachEntry
- void action(
-
DoubleLinkedQueueEntry<
E> element
-
DoubleLinkedQueueEntry<
Вызывает action для каждого объекта записи этой двусвязной очереди.
Каждому элементу очереди соответствует объект DoubleLinkedQueueEntry. Этот метод перебирает объекты записей от первого до последнего и по очереди вызывает action для каждого объекта.
К объектам записей также можно обратиться с помощью firstEntry и lastEntry, а перебирать их — с помощью DoubleLinkedQueueEntry.nextEntry() и DoubleLinkedQueueEntry.previousEntry().
Функция action может использовать методы DoubleLinkedQueueEntry, чтобы удалить запись, или вставить элементы перед ней либо после неё. Если текущая запись удалена, перебор продолжается с записи, которая следовала за текущей на момент вызова action. Элементы, вставленные после текущего элемента до его удаления, не будут обработаны при переборе.
Реализация
void forEachEntry(void action(DoubleLinkedQueueEntry<E> element)) {
var cursor = _sentinel._nextLink!;
while (true) {
var element = cursor._asNonSentinelEntry();
if (element == null) break;
if (!identical(element._queue, this)) {
throw ConcurrentModificationError(this);
}
cursor = cursor._nextLink!;
// Remember both element and element._nextLink (as cursor).
// If someone calls `element.remove()` we continue from `next`.
// Otherwise we use the value of element._nextLink which may have been
// updated.
action(element);
if (identical(this, element._queue)) {
cursor = element._nextLink!;
}
}
}
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-collection/DoubleLinkedQueue/forEachEntry.html