Zunächst bin ich ziemlich neu in Streams, so dass ich mich immer noch mit einigen gängigen Mustern beschäftige.Wie gruppieren Sie einen Stream, und bearbeiten Sie dann die Gruppen separat basierend auf dem Schlüssel der Gruppe?
In vielen Bibliotheken können wir einen Stream in einen Strom von Streams aufteilen, indem wir .groupBy (keySelectorFn) verwenden. Beispielsweise wird dieser Strom in Ströme aufgeteilt, basierend auf dem Wert von ‚a‘ in jedem Objekt (Pseudo-Code, an einem bestimmten Bibliothek basierte nicht):
var groups = Stream.of(
{ a: 1, b: 0 },
{ a: 1, b: 1 },
{ a: 2, b: 2 },
{ a: 1, b: 3 }
)
.groupBy(get('a'));
Say I Gruppen wollen anders verarbeiten, basierend auf dem Wert von ‚a‘ dieser Gruppe:
groups.map(function(group) {
if (..?) {
// Run the group through some process
}
return group;
});
ich kann nicht sehen, wie der Wert von ‚a‘ erhalten, ohne das erste Element jeder Gruppe raubend (und wenn das erste Element einer Gruppe verbraucht wird, um die Gruppe ist nicht mehr intakt).
Dies scheint mir eine ziemlich häufige Sache, die ich mit Streams machen möchte. Gehe ich falsch?
--- EDIT ---
Hier ist ein spezifischeres Beispiel für ein Problem, das ich auf bin stecken:
var groups = Stream.of(
{ a: 1, b: 0 },
{ a: 1, b: 1 },
{ a: 2, b: 0 },
{ a: 2, b: 1 },
{ a: 2, b: 2 },
{ a: 1, b: 2 }
)
.groupBy(get('a'));
Wie das erste 1-Objekt auszuwählen, in dem ein === 1 , und die ersten 2 Objekte, wo a === 2, und andere Objekte gerade durchgehen? Dies scheint logisch zu mir:
groups.chain(function(group) {
return group.key === 1 ?
group.take(1) :
group.key === 2 ?
group.take(2) :
group ;
});
Aber group.key nicht existiert (und selbst wenn es täte, würde es ein bisschen ... stinkende scheinen).
Suchst du so etwas ?: http://jsbin.com/haliqerita/edit?js,console –