Frage

Folgendes mache ich::Ich habe ein Ereignis aus einem RSS-Feed, das mir mitteilt, dass ein Ticket bearbeitet wurde.Um die Änderungen an diesem Ticket vorzunehmen, muss ich einen REST-Service anrufen.

Also wollte ich es mit einem kompakteren, funktionaleren Ansatz machen, aber es wurde einfach zu einem Haufen Verrücktheit.In der Tat ist das geradlinige Java im alten Stil so einfach:

/**
 * 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;
}

Es gab hier ein paar Fragen, die sich darauf bezogen, die keine einfachen Antworten zu haben schienen, ich stelle diese Frage, damit es ein sehr spezifisches Beispiel gibt und die Frage kristallklar ist:funktioniert es, dies mit Streams zu überarbeiten und wenn ja, wie?

Wenn Streams für solche Dinge nicht gut sind, sind sie wirklich nicht für viel gut.Der Grund, warum ich das sage, ist, dass dies eine sehr häufige Anforderung ist:dass einige Daten mit mehr Informationen aus einer anderen Quelle angereichert werden.

War es hilfreich?

Lösung

Was Sie brauchen, ist flatMap, das eine einzelne Karte zuordnen kann ProcessEvent objekt der Eingabeliste auf mehrere ProcessEventChange objekte, und glätten Sie alle diese Objekte zu einem einzigen Strom von ProcessEventChange.

List<ProcessEventChange> recentChanges = getLatestEvents().
         stream().
         flatMap(e -> getChanges(e).stream()).
         collect(Collectors.toList());
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top