Прежде всего, я довольно новичок в потоках, поэтому я все еще разбираюсь в некоторых общих шаблонах.Как вы группируете поток, а затем обрабатываете группы отдельно на основе ключа группы?
Во многих библиотеках мы можем разделить поток на поток потоков, используя .groupBy (keySelectorFn). Например, этот поток разделяется на потоки, основанные на значении «а» в каждом объекте (псевдо-кода, а не на основе какой-либо конкретной библиотеки):
var groups = Stream.of(
{ a: 1, b: 0 },
{ a: 1, b: 1 },
{ a: 2, b: 2 },
{ a: 1, b: 3 }
)
.groupBy(get('a'));
Скажем, я хочу обрабатывать группы по-разному на основе значение «а» этой группы:
groups.map(function(group) {
if (..?) {
// Run the group through some process
}
return group;
});
Я не могу видеть, как получить значение «а», не расходуя первый элемент каждой группы (и если первый элемент группы потребляется группа больше не повреждена).
Это кажется мне довольно распространенным явлением, который я хочу делать с потоками. Я принимаю неправильный подход?
--- EDIT ---
Вот конкретный пример проблемы, что я застрял на:
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'));
Как выбрать первый 1 объект, где === 1 , и первые 2 объекта, где === 2, и передать любые другие объекты прямо? Это кажется мне логичным:
groups.chain(function(group) {
return group.key === 1 ?
group.take(1) :
group.key === 2 ?
group.take(2) :
group ;
});
Но group.key не существует (и даже если он сделал это, казалось бы, немного ... вонючий).
Вы ищете что-то вроде этого: http://jsbin.com/haliqerita/edit?js,console –