Bei der Arbeit mit Datenstrukturen besteht häufig die Notwendigkeit, Daten auf unterschiedliche Weise zu manipulieren und zu verarbeiten. Ein häufiges Szenario ist die Konvertierung eines Iterators, einer sequentiellen Sammlung von Elementen, in einen Stream, eine vielseitigere und leistungsfähigere Datenverarbeitungspipeline.
Um diese Konvertierung effektiv zu erreichen, ist es wichtig, die Erstellung von Kopien der Daten zu vermeiden . Dies ist sowohl ineffizient als auch unnötig, insbesondere beim Umgang mit großen Datensätzen.
Ein Ansatz besteht darin, die StreamSupport-Klasse zu verwenden. Es bietet Methoden zum Erstellen eines Streams aus einem Iterable oder Spliterator. In diesem Fall können wir mithilfe von Spliterators.spliteratorUnknownSize() einen Spliterator aus dem Iterator erstellen. Hier ist ein Beispiel:
<code class="java">Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator(); Stream<String> targetStream = StreamSupport.stream( Spliterators.spliteratorUnknownSize(sourceIterator, Spliterator.ORDERED), false);</code>
Eine weitere Option besteht darin, ein Iterable aus dem Iterator zu erstellen. Iterable ist eine funktionale Schnittstelle, und mit Lambdas können wir ganz einfach ein Iterable aus einem Iterator erstellen:
<code class="java">Iterable<String> iterable = () -> sourceIterator; Stream<String> targetStream = StreamSupport.stream(iterable.spliterator(), false);</code>
Dieser Ansatz ist wohl besser lesbar, da er das Design der funktionalen Schnittstelle nutzt. Indem Sie unnötiges Kopieren vermeiden, können Sie Ihre Daten effizient verarbeiten und gleichzeitig die Leistung und Codeklarheit beibehalten.
Das obige ist der detaillierte Inhalt vonWie konvertiere ich einen Iterator in einen Stream, ohne Daten zu kopieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!