BitSet
имеет метод stream()
, но он не реализует интерфейс Iterable
, как и другие типы, которые предоставляют этот метод. Есть ли конкретная причина для этого?Почему BitSet не Iterable?
ответ
Ни один из методов в Iterable
(foreach
, iterator
и spliterator
) не предусмотрено в BitSet
. В Iterable
нет метода stream()
.
Кроме того, stream()
метод BitSet
не возвращает поток над битами набора бит, но возвращает поток над индексов битов, значения которых установлены (что-то в заблуждение ТВН). Поэтому, технически говоря, с Iterable
почти нет ничего общего.
Возможно, чтобы избежать дорогого бокса каждый бит до экземпляра Boolean
.
Зацикливание по нему с использованием собственных API позволит избежать всех распределений.
может быть примитивным коротким, я думаю –
@fabienbk: Нет; Java не поддерживает примитивные дженерики. – SLaks
Бокс для булева действительно дешевый: их всего два, и они кэшируются. 'Stream' возвращает' int ', представляющий установленные битовые индексы; Я думаю, что OP ожидает, что 'Iterable' будет делать то же самое (кроме' Integer'). –
BitSet
не является «истинным» членом рамки коллекции java, поэтому технически нет необходимости реализовывать Collection.iterator()
и предоставить его.
public class BitSet implements Cloneable, java.io.Serializable
Более конкретно, оба будут плохо приспособлены togethoer.
BitSet не общий, в отличие от java.util.Iterator; BitSet предоставляет специальные методы со специальными функциями для побочных эффектов и случайной адресации, в отличие от Iterator.
Одна из причин (не вся причина, может быть) заключается в том, что Iterable
будет неэффективным, поскольку бит-индексы должны быть помещены в бокс; поток может использовать примитивные ints.
Существует эффективный способ итерации битового набора без использования Iterable
, как описано в Javadoc, поэтому это не обязательно.
- 1. Почему нет перечислений Iterable?
- 2. Почему это не фильтр (не None, iterable)?
- 3. bitset to dynamic bitset
- 4. Почему std :: bitset :: reference :: operator ~?
- 5. Почему мы добавляемAll (Collection), но не Iterable?
- 6. Scala iterable и java iterable
- 7. Почему std :: bitset :: size non-static
- 8. объект 'модель' не Iterable
- 9. ВНУТР объект не Iterable
- 10. '' RelatedManager не Iterable
- 11. «numpy.float64» не Iterable
- 12. Объект «Popen» не Iterable
- 13. Джанго 'NoneType' не Iterable
- 14. экземпляра класса не Iterable
- 15. Does BitSet flip() влияет на длину BitSet?
- 16. bitset :: operator [] == false/true или bitset :: test?
- 17. Почему Iterable <DeclarationMirror> не может быть передан в Iterable <MethodMirror>?
- 18. Почему Java `BitSet` не имеет функций` shiftLeft` и `shiftRight`?
- 19. BitSet не устанавливая правильное значение
- 20. Почему вызывающий список() на iterable меняет его?
- 21. Почему `zip`, кажется, потребляет` groupby` iterable?
- 22. Почему этот Iterable создает набор после отображения?
- 23. Почему итератор оценивается при создании нового Iterable?
- 24. Почему там нет `метод map` на` Iterable`
- 25. Почему создание класса iterable производит этот вывод?
- 26. Флип Scala BitSet
- 27. python make class iterable, возвращая встроенный iterable
- 28. Назначить значение Bitset
- 29. BitSet показывает значения назад?
- 30. Пример Java BitSet
О, хорошая точка. Я отредактирую свой вопрос. –