BitSet
hat eine stream()
-Methode, implementiert aber nicht die Iterable
-Schnittstelle wie andere Typen, die diese Methode bereitstellen. Gibt es einen bestimmten Grund dafür?
Keine der Methoden in Iterable
( foreach
, iterator
und spliterator
) wird in BitSet
bereitgestellt. Es gibt keine stream()
-Methode in Iterable
.
Außerdem gibt die Methode stream()
von BitSet
keinen Stream über die Bits des Bitsatzes zurück, sondern gibt einen Stream über die Indizes der Bits zurück, deren Werte festgelegt sind (was Art von verwirrender TBH). Technisch gesehen scheint also mit Iterable
fast nichts zu tun zu haben.
BitSet
ist kein "wahres" Mitglied des Java-Collection-Frameworks, daher muss technisch nicht Collection.iterator()
implementiert und eins bereitgestellt werden.
Mehr auf den Punkt, beide würden schlecht zusammen passen.
BitSet sind nicht generisch , im Gegensatz zu java.util.Iterator; BitSet bietet Ad-hoc-Methoden mit speziellen Funktionen für Nebenwirkungen und zufällige Adressierung, anders als Iterator.
Ein Grund (vielleicht nicht der ganze Grund) ist, dass Iterable
ineffizient wäre, weil die Bit-Indizes eingerahmt werden müssen; Der Stream kann primitive Ints verwenden.
Es gibt eine effiziente Möglichkeit, das Bitset ohne Verwendung von Iterable
zu durchlaufen, wie im Javadoc beschrieben, also ist es nicht wirklich notwendig.