Android,Room,RxJava如何将查询结果合并到一个地图中并返回为可流动的

时间:2018-05-07 07:35:10

标签: android

这里我有3种方法可以获得3种不同类型的数据列表 以下这些代码在

@Dao
public interface  GlassesDao {
  @Query("SELECT * FROM len")
  Flowable<List<Glasses>> getAllLens();

  @Query("SELECT * FROM frame")
  Flowable<List<Glasses>> getAllFrames();

  @Query("SELECT * FROM framecolor")
  Flowable<List<Glasses>> getAllFrameColors();

现在我希望它将它们作为地图返回

@Transaction //idk if Transaction is used like this
Flowable<Map<String, List<Glasses>>> getAll()

并提出一些附加问题,但仍然参考标题,我认为: 我用来获取对象列表的代码是否正确?如果不是如何制作它?

还有一个:我应该如何设计实体?

现在有3个儿童班级别的“眼镜”,我想要这3个孩子的3张桌子,但不需要眼镜(实际上没有真正的“眼镜”只需要3个参数,如上面的代码所示“len,frame,framecolor”) 但我必须使用父子模式,因为我需要将它们组合成一个列表,就像地图所示。

Map<String, List<Glasses>>

如果我的问题被理解,请尽快,但感谢您的宝贵时间!

1 个答案:

答案 0 :(得分:0)

像这样。

Flowable.zip(database.dao().getAllLens(),
        database.dao().getAllFrames(),
        database.dao().getAllFrameColors(),
        new Function3<List<Glasses>, List<Glasses>, List<Glasses>, Map<String, List<Glasses>>>() {
            @Override
            public Map<String, List<Glasses>> apply(List<Glasses> o, List<Glasses> o2, List<Glasses> o3) throws Exception {
                /* Perform map population here */
            }
});