RxJava.通过几个源生成视图对象的正确方法



我有两个实体类,它们存储在SQLite中:UserEntitySessionInfoEntity

public class UserEntity{
    private Long id;
    private String userName;
    // ....
}
public class SessionInfoEntity{
    private Long id;
    private Date beginSessionDate;
    private Date endSessionDate;
    // ....
}

用户可以有多个会话(一对多关系(。

我有一个存储库,它提供了从我的SQLite数据库中获取数据(RxJava可观察量(的必要方法:

public class MyRepository{
    public Observable<List<UserEntity>> getAllUsers(){/* ... */}
    public Observable<SessionInfoEntity> getLastSessionInfoForUser(Long userId){/* ... */} // returns info of last session for user with id=userId
}

我需要为每个用户生成下一个 ViewObject,使用 MyRepository 的方法和 RxJava

public class UserViewObject {
    private String userName;
    private Integer lastSessionDurationInHours;
    // ....
}

事实证明,我需要为每个用户调用getLastSessionInfoForUser()才能创建UserViewObject

问:如何正确使用 RxJava 生成UserViewObject

我正在尝试以这种方式开始这样做:

myRepository
            .getAllUsers()
            .flatMap(lst -> Observable.from(lst))
            .flatMap(ve -> getLastSessionInfoForUser(ve.getId())
            .map(lse -> /* ?????  */) // In this operator I lose access to current user => I can't generate UserViewObject, because I haven't access to ve.getUserName() method

PS:我无法在MyRepository中编写方法,它将返回包含完整信息的对象。

P.P.S.:将来,将添加与用户实体相关的新方法(如getLastSessionInfoForUser()方法(。

您可以在

最后一个flatMap中添加地图。像这样,您可以访问 ve .

myRepository
        .getAllUsers()
        .flatMap(lst -> Observable.from(lst))
        .flatMap(ve -> getLastSessionInfoForUser(ve.getId()).map(lse -> /* ... */))

相关内容

  • 没有找到相关文章