我正在使用Android室持久性庫,該庫返回MyModel的列表(Flowable<List<MyModel>>
)的Flowable列表。 MyModel
具有函數getMonth
,它返回一個整數。使用RxJava將模型類分組到其他模型
我想將MyModel分組到MyModelWrapper中,MyModelWrapper是MyModel和整數列表(MyModelWrapper(int month, List<MyModel>)
)的包裝類。
代碼應該組MyModel
MyModel(0)
,MyModel(0)
,MyModel(1)
,MyModel(2)
列表成MyModelWrapper
MyModelWrapper(0, List(MyModel(0), MyModel(0))
,MyModelWrapper(1, List(MyModel(1))
和MyModelWrapper(2, List(MyModel(2))
列表。我怎麼會RxIfy這裏面沒有使用RxJava
List<MyModel> models = database.myModelDao().getMyModels();
Map<Integer, List<MyModel>> orderedData = new HashMap<>();
for(MyModel model : models) {
if(orderedData.get(model.getMonth()) == null) {
orderedData.put(model.getMonth(), new ArrayList<MyModel>());
}
orderedData.get(model.getMonth()).add(model);
}
final ArrayList<MyModelWrapper> recordedModels = new ArrayList<>();
for (Map.Entry<Integer, List<MyModel>> cursor : recordedModels.entrySet()) {
List<MyModel> myModelRecords = cursor.getValue();
MyModelWrapper modelWrapper = new MyModelWrapper()
.setMyModels(myModelRecords)
.setMonth(cursor.getKey());
recordedModels.add(modelWrapper);
}
return recordedModels;
我當前的代碼?
我試圖從Flowable
與first()
獲得的第一個元素,在groupBy()
我的鑰匙,但被返回GroupedObservable
這將在某種程度上變成一個列表,然後轉化爲轉換爲MyModelWrapper列表。
任何幫助表示讚賞!
解決方案我最終使用:
getMyModelsFlowable()
.flatMapIterable(new Function<List<MyModel>, Iterable<MyModel>>() {
@Override
public Iterable<MyModel> apply(List<MyModel> models) throws Exception {
return models;
}
}).groupBy(new Function<MyModel, Integer>() {
@Override
public Integer apply(MyModel model) throws Exception {
return model.getMonth();
}
}).flatMapSingle(new Function<GroupedFlowable<Integer, MyModel>, SingleSource<MyModelWrapper>>() {
@Override
public SingleSource<MyModelWrapper> apply(final GroupedFlowable<Integer, MyModel> group) throws Exception {
return group.toList().map(new Function<List<MyModel>, MyModelWrapper>() {
@Override
public MyModelWrapper apply(List<MyModel> models) throws Exception {
return new MyModelWrapper()
.setMyModels(models)
.setMonth(group.getKey());
}
});
}
});
你可以使用lambda表達式,使其更加簡潔。 – chandil03