如何将迭代版本重写为Rx

时间:2017-12-30 19:08:30

标签: rx-java reactive-programming

我正在将一个小项目重写为Rx并陷入困境。

该项目的目标是为每个

创建总记录列表
  1. NBA球员(记录收集工资信息+统计信息:勒布朗总共得到1000万,得分35000分,3120次助攻等);
  2. NBA球队(记录关于球队的统计数据:失利率):自从NBA开始以来,骑士队的战绩为356-200。
  3. 所以最后我们将获得2个大记录(记录== csv文件,每个玩家/团队一行): NBA球员:

    • LeBron,10e6,35000,3120
    • Kobe,3e6,1020,122

    NBA球队

    • 骑士,356,200
    • 勇士,1000,30

    最初,有一系列球员,每个球员每年都有一系列薪水(基本上勒布朗打了很多赛季,我们得到了关于他的信息:[10e6,15e6,20e6]并基于此我们更新的信息(一个薪水字段),一个Map<Player, Info>,其中Info有薪水,积分,助攻等字段。所以我们可以迭代我们的玩家并首先将它们作为关键点插入然后增加那个薪水领域。

    然后我们有了一系列游戏 - &gt;我们迭代并更新Map<Player, Info>(点数,辅助字段),然后更新Map<Team, WLBalance>,其中WLBalance只是一对。

    现在我想切换到Rx,我有2个observable(一个发出<Player, Salary in some year>,另一个发出GameInfo)。最后我想发出结果记录: NBA球员:

    • LeBron,10e6,35000,3120
    • Kobe,3e6,1020,122 等

    NBA球队:

    • 骑士,356,200
    • 勇士,1000,30

    我想使用reduce(获得薪水,积分,助攻)功能来观察Observables,但我无法想出如何基于此过滤Player首先。然后它更多的是更新Map<K, V>中的值而不是减少某些Observable中的值。

    所以我的问题是

    1. 因为这些记录都是观察和发射的,它们应该是哪种类型?看起来像是主题。
    2. 如何在Rx中替换Map逻辑(这样Rx方法会很好)?我们的想法是,我们不知道我们是否首先得到关于这个玩家的工资信息,然后尝试更新统计数据,或者我们先得到关于他的统计数据,然后看到工资,哪个观察者发出了关于这位球员的价值)。

1 个答案:

答案 0 :(得分:0)

目前还不清楚您获取数据的顺序。但是,如果您只是想通过播放器减少,那么您可以使用public GameObject[] tileprefabs; private Transform playerTransform; private float spawnz = 10.0f; private float tileLength = 7.0f; private float amnoftilesOnScreen = 20.0f ; // Use this for initialization void Start () { playerTransform = GameObject.FindGameObjectWithTag("player").transform; for(int i=0; i<amnoftilesOnScreen; i++) { spawntiles(); } } // Update is called once per frame void Update () { if(playerTransform.position.z>(spawnz - amnoftilesOnScreen*tileLength)) { spawntiles(); } } private void spawntiles(int prefabIndex = -1) { GameObject go = Instantiate(tileprefabs[0] as GameObject); go.transform.SetParent(transform); go.transform.position = Vector3.forward * spawnz; spawnz += tileLength; } 运算符来执行映射:

groupBy()

然后,您可以对团队数据执行相同操作。