Ich lese einen Stream, in dem ich in einem bestimmten Zeitintervall nach Json-Werten suche. Alles gelesen, vor und während der Werte im Zeitintervall möchte ich cachen. Sobald der Stream alle Werte im Zeitintervall gelesen hat (chronologische Reihenfolge vorausgesetzt), sollte ich aufhören zu lesen.Scala-Stream lesen, bis die Kriterien erfüllt sind
Dieser Code speichert alle Werte in einer veränderbaren Liste und filtert dann nur nach json im Datumsbereich. Aber es hört nicht auf zu lesen, sobald der Filter abgeschlossen ist, es speichert alles im Stream zwischen.
val cache: MutableList[JsValue] = MutableList.empty
pg.pins.flatten
.map(record => {cache += record; record})
.filter(js => (js \ "created_at").as[Date].after(start) && (js \ "created_at").as[Date].before(end))
Jede Hilfe wird geschätzt.
Das ist großartig, es ist genau die Art von Vereinfachung I war auf der Suche nach. Ich weiß, dass ich kein veränderbares, wenn möglich, verwenden sollte, aber ich weiß nicht, wie ich es sonst tun soll. Was Sie gezeigt haben, umfasst Daten mit dem Datumsbereich, aber ich muss weiterhin alle Daten zwischenspeichern, bevor ich den Filterpunkt (separat) erreiche. Irgendwelche Vorschläge? – jay
Oh, ich wusste nicht, dass du es behalten willst. Siehe aktualisierte Antwort. – Dima
Perfect danke – jay