Tôi có Danh sách các SourceObject và tôi cần phải chuyển đổi nó thành Danh sách ResultObjects.RxJava: Cách chuyển đổi Danh sách đối tượng thành Danh sách đối tượng khác
Tôi có thể lấy một đối tượng khác phương pháp sử dụng của ResultObject:
convertFromSource(srcObj);
dĩ nhiên là tôi có thể làm điều đó như thế này:
public void onNext(List<SourceObject> srcObjects) {
List<ResultsObject> resObjects = new ArrayList<>();
for (SourceObject srcObj : srcObjects) {
resObjects.add(new ResultsObject().convertFromSource(srcObj));
}
}
nhưng tôi sẽ rất trân trọng cho những người có thể hiển thị cách thực hiện tương tự bằng cách sử dụng rxJava.
Điều này trông thực sự sạch sẽ, mặc dù có một số nhược điểm. 1. Nếu nguồn phát ra nhiều hơn một danh sách, tất cả chúng sẽ được làm phẳng bởi 'flatMapIterable' thành một dòng các đối tượng và' toList() 'sẽ thu thập chúng trong một danh sách duy nhất. Vì vậy, nếu bạn quan tâm đến nhiều phát thải và giữ chúng trong các danh sách riêng biệt, thì rất tiếc là bạn đã mất điều này. 2. 'toList()' chờ cho nguồn có thể quan sát được, vì vậy nếu bạn làm điều đó trên một quan sát vô hạn (giống như một ràng buộc với các sự kiện UI), bạn sẽ không bao giờ nhận được bất cứ điều gì trong 'subscribe()' của bạn. –
@ MarcinKoziński bạn sẽ giải quyết nr như thế nào. 2? Tôi đang gặp tình huống .toList không trả lại bất cứ điều gì. Cảm ơn –
Tôi nghĩ bạn chỉ cần sử dụng một cách tiếp cận khác. Nếu bạn đang cố chuyển đổi từng phần tử của một danh sách, bạn có thể phải thực hiện '.map (list ->/* xây dựng một danh sách mới bằng cách sử dụng đồng bộ cũ cho vòng lặp * /)'. Hoặc sử dụng bất kỳ cách tiếp cận nào khác để chuyển đổi danh sách của bạn bên trong '.map()'. Nếu không, bạn có thể sử dụng toán tử như '.take (itemCount)' trên quan sát vô hạn của bạn để làm cho nó hữu hạn. Lưu ý rằng điều này rõ ràng sẽ giảm tất cả các phần tử sau 'itemCount', do đó có thể không phải là những gì bạn muốn. –