Wie kann man die Berechnung des Stromflusses basierend auf früheren Ergebnissen unterbrechen? Wenn es offensichtlich ist, dass stream.filter (...). Count () kleiner als eine Zahl ist - wie kann man die Stream-Berechnung stoppen?
Ich habe den folgenden Code, der überprüft, ob einige sampleData
den predicate
test bestehen:
Ich könnte Tausende von sampleData
haben. Das Problem ist, dass dieser Code unwirksam ist. Wenn beispielsweise coefficient
gleich 0.5
, sampleData.size() = 10_000_000
und erste 5_000_000
Elemente die predicate::test
fehlschlagen, gibt es keinen Grund, die letzten 5_000_000
Elemente zu validieren ( count () wird nie größer sein als 5_000_000
).
ZhekoKozlovs Antwort geht in die richtige Richtung, aber es fehlt die Negation. Damit die Übereinstimmungen größer als ein bestimmter Schwellenwert sind, muss die Anzahl der nicht übereinstimmenden Elemente kleiner als "Größe - Schwellenwert" sein. Wenn wir testen, ob die nicht übereinstimmenden Elemente kleiner sind, können wir limit
anwenden, um zu stoppen, sobald sie größer werden:
Es gibt übrigens keinen Grund, einen Methodenverweis auf die Testmethode eines bestehenden Predicate
like mit predicate::test
anzulegen. Übergeben Sie einfach Predicate
an die Methode filter
. Der obige Code verwendet auch predicate.negate()
anstelle von predicate.negate()::test
...
Um ehrlich zu sein, bin ich mir nicht ganz sicher, ob das richtig wäre. Ich hoffe, dass jemand mitkommen wird, um das zu überprüfen, aber hier ist meine Idee, einen benutzerdefinierten Spliterator zu verwenden:
%Vor% Und das wird zum Beispiel nur 4 Elemente erzeugen, da wir sagen, dass es nur einen Koeffizienten 5
hat:
Auch dies ist nur für Spliter mit bekannter Größe möglich.
Tags und Links java java-8 java-stream