Как я могу объединить оба значения с помощью Single.flatMap? - PullRequest
0 голосов
/ 29 января 2020

У меня есть этот код:

private Single<Invoice> getInvoiceWithItems() {
    return getInvoice().flatMap(invoice -> getItems(invoice)); // <--- Here, I need invoice and items
}

private Single<Invoice> getInvoice() { ... }

private Single<List<Item>> getItems(Invoice invoice) { ... }

Я хочу сделать что-то вроде invoice.setItems(items). Я попытался передать дополнительный параметр функции в flatMap, но он не принимает его.

Как я могу это сделать?

Я нашел это решение, но я не уверен, если оно самый лучший:

private Single<Invoice> getInvoiceWithItems() {
    return Single.zip(getInvoice(), getInvoice().flatMap(invoice -> getInvoiceItems(invoice)), (invoice, items) -> {
        invoice.setItems(items);
        return invoice;
    });
}

1 Ответ

3 голосов
/ 29 января 2020
private Single<Invoice> getInvoiceWithItems() {
    return getInvoice().flatMap(invoice -> getItems(invoice).map(items -> {
        invoice.setItems(items);
        return invoice;
    }));
}
...