我有两个实体类,它们存储在SQLite中:UserEntity
和SessionInfoEntity
:
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 -> /* ... */))