Domanda

Ecco cosa sto facendo: Ho un evento da un feed RSS che mi sta dicendo che un biglietto è stato modificato.Per ottenere le modifiche apportate a quel biglietto, devo chiamare un servizio di riposo.

Quindi volevo farlo con un approccio funzionale più compatto, ma è appena trasformato in un mucchio di follia.Quando infatti, il vecchio stile diretto Java è questo semplice:

/**
 * Since the primary interest is in what has been changed, we focus on getting changes
 * often and pushing them into the appropriate channels.
 *
 * @return changes made since we last checked
 */
public List<ProcessEventChange> getLatestChanges(){
    List<ProcessEventChange> recentChanges = new ArrayList<>();
    List<ProcessEvent> latestEvents = getLatestEvents();
    for (ProcessEvent event : latestEvents){
        recentChanges.addAll(getChanges(event));
    }
    return recentChanges;
}
.

C'erano una coppia domande qui che correlate a questo che non sembrano avere risposte semplici, sto facendo questa domanda in modo che ci sia un esempio molto specifico e la domanda è cristallina: funziona con la lavorazione di questo con flussi eSe sì, come?

Se i flussi non sono buoni per cose del genere, non sono davvero buoni per molto.La ragione per cui dico questo è questo è un requisito molto comune: che alcuni dati siano arricchiti con ulteriori informazioni da un'altra fonte.

È stato utile?

Soluzione

Quello di cui hai bisogno è flatmap, che può mappare un singolo oggetto ProcessEvent dell'elenco di ingresso a più oggetti ProcessEventChange e appiattire tutti gli oggetti su un singolo flusso di generatori di generazione.

List<ProcessEventChange> recentChanges = getLatestEvents().
         stream().
         flatMap(e -> getChanges(e).stream()).
         collect(Collectors.toList());
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top