Ich habe gerade begonnen, Scala zu lernen, und ich bin verwirrt zwischen dem Filter und takeWhile während der Arbeit an Streams.
Ich bin auf dieses Programm gestoßen, um Primzahlen zu generieren, die sowohl takeWhile als auch Filter für einen Stream verwenden.
%Vor%Beim Experimentieren fand ich
%Vor%gibt mich zurück
%Vor%während
%Vor%läuft unendlich.
Der Unterschied ist nicht streamspezifisch, sondern für alle Sammlungen, die erweitern GenTraversableLike
:
filter
Gibt alle Elemente zurück, die das Prädikat
erfüllenp
takeWhile
Gibt das längste Präfix zurück, dessen Elemente das Prädikat
p
erfüllen.
z. B.
%Vor% Insbesondere endet Stream.from(1).filter(_ < 10).toList
nicht, weil es jedes Element des Streams überprüfen muss: es "weiß" nicht, dass es keine Elemente geben wird, die _ < 10
nach 9 (und tatsächlich dort) erfüllen sind, dank wraparound).
Tags und Links scala functional-programming