Iterable
hat eine Methode spliterator()
, die Sie an StreamSupport.stream
übergeben können, um einen Stream zu erstellen:
StreamSupport.stream(iterable.spliterator(), false)
.filter(...)
.moreStreamOps(...);
Dies ist eine viel bessere Antwort als die direkte Verwendung von spliteratorUnknownSize
, da es sowohl einfacher ist als auch ein besseres Ergebnis liefert. Im schlimmsten Fall handelt es sich um denselben Code (die Standardimplementierung verwendet spliteratorUnknownSize
), aber im häufigeren Fall, wo Ihr Iterable
bereits eine Sammlung ist, erhalten Sie einen besseren Spliterator und somit eine bessere Stream-Leistung (vielleicht sogar eine gute Parallelität). Außerdem ist es weniger Code.
Wie Sie sehen können, ist das Erhalten eines Streams aus einem Iterable
(siehe auch diese Frage) nicht sehr schmerzhaft.