我正在给Rx重写一个小项目,结果被困住了。
该项目的目标是为每个
最后,我们将获得两项大记录(记录== csv文件,每个球员/团队一条线):NBA球员:
等
NBA球队
等
最初,每个球员都有一组球员,每个球员每年都有自己的薪水(基本上LeBron打了很多赛季,我们得到了关于他的信息: 10e6,15e6,20e6,根据这些信息我们更新了一个工资字段(一个工资字段),一个Map<Player, Info>
,其中有工资、积分、助攻等领域。因此,我们只需迭代我们的球员,首先插入他们作为一个键,然后增加工资字段。
然后我们有一个游戏数组->,我们迭代和更新Map<Player, Info>
(点数,助攻字段),然后是Map<Team, WLBalance>
,其中WLBalance
只是一对。
现在我想切换到Rx,我有两个可观察到的(一个发射<Player, Salary in some year>
,另一个发射GameInfo
)。最后,我想发出结果记录: NBA球员:
NBA球队:
我想使用reduce
(以获得的总工资、积分、助攻)功能,但我想不出如何首先基于Player
进行过滤。然后是关于更新Map<K, V>
中的值,而不是在一些可观察到的情况下减少值。
所以我的问题是
发布于 2018-01-01 16:32:48
目前还不清楚您获取数据的顺序。但是,如果您只想按player减少,那么可以使用groupBy()
操作符来执行映射:
PlayerInfo mergeIt(PlayerInfo accumulator, PlayerInfo player) {
accumulator.name = player.name;
accumulator.salary += player.salary;
accumulator.points += player.points;
accumulator.assists += player.assists;
return accumulator;
}
void runIt() {
PublishSubject<PlayerInfo> pi = PublishSubject.create();
pi.groupBy(PlayerInfo::getName)
.flatMap(players -> players.collect(PlayerInfo::new,
( piNew, p ) -> mergeIt( piNew, p ) ) )
.subscribe(System.out::println);
pi.onNext(new PlayerInfo("LeBron", 14000.0, 21, 32));
pi.onNext(new PlayerInfo("Kobe", 12000.0, 22, 31));
pi.onNext(new PlayerInfo("LeBron", 6000.0, 4, 14));
pi.onCompleted();
}
然后,您可以对团队数据执行同样的操作。
https://stackoverflow.com/questions/48037046
复制相似问题