Stoppen Sie Java-Stream-Berechnungen auf der Grundlage der vorherigen Berechnungsergebnisse

8

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:

%Vor%

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 ).

    
Volodymyr Bakhmatiuk 12.09.2017, 10:05
quelle

3 Antworten

4

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:

%Vor%

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 ...

    
Holger 12.09.2017, 16:46
quelle
4

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:

%Vor%

Auch dies ist nur für Spliter mit bekannter Größe möglich.

    
Eugene 12.09.2017 10:53
quelle
0
%Vor%     
ZhekaKozlov 12.09.2017 10:17
quelle

Tags und Links