Java-8: boolean primitive array-stream?
Es ist keine schöne Art und Weise zu konvertieren gegeben boolean[] foo
array in stream in Java-8 in einer Anweisung, oder bin ich etwas fehlt?
(ich werde nicht Fragen warum?, aber es ist wirklich unverständlich: warum nicht fügen Sie die stream-Unterstützung für alle primitiven Typen?)
Hinweis: Arrays.stream(foo)
wird nicht funktionieren, es gibt keine solche Methode für boolean[]
geben.
In der Tat, Java 8 bietet nur spezialisierte primitiven streams für
Ich denke, der Punkt ist, um in der Lage zu tun stream-Operationen. Sie können tun, dass auf BitSet?
ja, Sie können tun, stream-Operationen auf bit-set. Das Ergebnis könnte aber anders sein, als Sie für das streaming über die bits (D. H. Ihre positions-Nummer) dann. Überraschend ist, dass die Hindernisse auf der anderen Seite: es gibt keine prägnante Art und Weise zu konvertieren
Hoffe, der verlinkte Q&A noch hilft. Erstellen
BooleanSupplier rundet die matrix der
int
, long
und double
, und Arrays.stream
nicht akzeptieren boolean[]
. Ich denke, Sie haben zu Feld.Ich denke, der Punkt ist, um in der Lage zu tun stream-Operationen. Sie können tun, dass auf BitSet?
ja, Sie können tun, stream-Operationen auf bit-set. Das Ergebnis könnte aber anders sein, als Sie für das streaming über die bits (D. H. Ihre positions-Nummer) dann. Überraschend ist, dass die Hindernisse auf der anderen Seite: es gibt keine prägnante Art und Weise zu konvertieren
boolean[]
array an eine BitSet
.Hoffe, der verlinkte Q&A noch hilft. Erstellen
BooleanStream
würde auch bedeuten, die Schaffung von PrimitiveIterator.OfBoolean
, OptionalBoolean
, BooleanFunction<T>
, BooleanPredicate
(oder tun wir missbrauchen BooleanUnaryFunction
für das?), BooleanBinaryOperator
, BooleanToIntFunction
, BooleanToLongFunction
, BooleanToDoubleFunction
, BooleanConsumer
, (aus irgendeinem unerfindlichen Grund BooleanSupplier
vorhanden)ObjBooleanConsumer
, BooleanSummaryStatistics
usw.BooleanSupplier rundet die matrix der
(Object|int|long|double|void) -> (Object|int|long|double|void|boolean)
Funktionen: alle 30 dieser tatsächlich existiert im JDK, und keine andere/null-argument-Funktionen geboten scheint. So BooleanSupplier
sieht zumutbar ist.InformationsquelleAutor Andremoniy | 2017-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gegeben
boolean[] foo
verwendenBeachten Sie, dass jede Boolesche Wert wird geschachtelt werden, aber es ist in der Regel kein großes problem, da Boxen für boolean keine zusätzlichen Speicher zuweisen (nur verwendet eine der vordefinierten Werte -
Boolean.TRUE
oderBoolean.FALSE
).boolean
s kann der Grund sein, warum gibt es keine spezielle primitive streams fürboolean
s?Nice one +1, mal sehen, vielleicht andere Ideen kommen, in der Menschen Geist 🙂
dafür gibt es mehrere Gründe. Einer von Ihnen ist der code, den blow-up: jede primitiv-stream fügt eine große Menge von spezialisierten code, nicht zu erwähnen, quadratische API wachsen, wenn Sie Sie hinzufügen
IntStream.mapToBoolean
,BooleanStream.mapToDouble
und so weiter. Also musste Sie irgendwo halt. Sie berücksichtigt, dassint
,long
unddouble
sind nützlich, die meisten primitiven Typen, so war es ein angemessener Kompromiss. Hoffentlich Java 10 uns bringen wird generische Spezialisierung undStream<boolean>
funktioniert out of the box.Nah wie Sie bekommen können, denke ich. Aber "schön" ist anders - IMHO. (+1)
danke, macht Sinn, ja 🙂
InformationsquelleAutor Tagir Valeev
Können Sie Guave ist
Boolean
Klasse:Dies ist eine ziemlich effiziente Art, weil
Booleans.asList
gibt einen wrapper für das array und macht keine Kopien.toArray()
. Auch wird es nicht parallelisieren toll (falls jemand interessiert).Valeev: Standard spliterator von
List
“Berichte Spliterator.GRÖßE und Spliterator.BESTELLT"...Ich habe gerade überprüft die Eigenschaften der spliterator zurückgegeben
Booleans.asList()
und es sieht aus wie es hat eine GROßE charateristic.sorry, mein Fehler. Dann das einzige problem ist die Parallelität. Obwohl es auch angesprochen in Java 9.
NÖ, spliterator
trySplit()
Methode muss ordnungsgemäß umgesetzt werden. Standard ist "armer Mann Parallelität", die Traversen, die Liste sequentiell per iterator in zwischen-PufferInformationsquelleAutor ZhekaKozlov