Ho l'elenco di oggetti SourceObjects e ho bisogno di convertirlo nell'elenco di ResultObjects.RxJava: Come convertire un elenco di oggetti in un elenco di altri oggetti
posso prendere un oggetto all'altro metodo che utilizza di ResultObject:
convertFromSource(srcObj);
Certo che posso farlo in questo modo:
public void onNext(List<SourceObject> srcObjects) {
List<ResultsObject> resObjects = new ArrayList<>();
for (SourceObject srcObj : srcObjects) {
resObjects.add(new ResultsObject().convertFromSource(srcObj));
}
}
ma sarò molto apprezzare a qualcuno che può mostrare come fare lo stesso usando rxJava.
Sembra davvero pulito, ma presenta alcuni svantaggi. 1. Se la sorgente emette più di una lista, saranno tutte appiattite da 'flatMapIterable' in un singolo flusso di oggetti e' toList() 'le raccoglierà in una singola lista. Quindi se ti preoccupi delle emissioni multiple e tienili in liste separate, sfortunatamente perdi questo. 2. 'toList()' aspetta che la sorgente osservabile si completi, quindi se lo fai su un osservabile infinito (come un evento legato agli eventi dell'interfaccia utente), non otterrai mai nulla nel tuo 'subscribe()'. –
@ MarcinKoziński come risolveresti nr. 2? Sto avendo la situazione in cui .toList non restituisce nulla. Grazie –
Penso che tu abbia solo bisogno di usare un approccio diverso. Se stai provando a trasformare ogni elemento di una lista, dovresti semplicemente fare '.map (list ->/* costruisci una nuova lista usando plain old for loop * /)'. Oppure usa un altro approccio per trasformare la tua lista all'interno di '.map()'. Altrimenti potresti usare operatori come '.take (itemCount)' sul tuo infinito osservabile per renderlo finito. Nota che questo ovviamente elimina tutti gli elementi dopo 'itemCount', quindi potrebbe non essere quello che vuoi. –