Question

Voici ce que je fais :J'ai un événement provenant d'un flux RSS qui m'indique qu'un ticket a été modifié.Pour obtenir les modifications apportées à ce ticket, je dois appeler un service REST.

Je voulais donc le faire avec une approche plus compacte et fonctionnelle, mais cela s'est transformé en un tas de folie.Alors qu’en fait, l’ancien style Java est aussi simple :

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

Il y avait quelques questions ici liées à cela qui ne semblaient pas avoir de réponses simples, je pose cette question pour qu'il y ait un exemple très précis et que la question soit parfaitement claire :est-ce que ça marche de retravailler cela avec des flux et si oui, comment ?

Si les flux ne sont pas bons pour des choses comme celle-ci, ils ne le sont vraiment pas pour grand-chose.La raison pour laquelle je dis cela est qu'il s'agit d'une exigence très courante :qu'une donnée soit enrichie avec plus d'informations provenant d'une autre source.

Était-ce utile?

La solution

Ce dont vous avez besoin est flatMap, qui peut cartographier un seul ProcessEvent objet de la liste d'entrée à plusieurs ProcessEventChange objets, et aplatir tous ces objets en un seul flux de ProcessEventChange.

List<ProcessEventChange> recentChanges = getLatestEvents().
         stream().
         flatMap(e -> getChanges(e).stream()).
         collect(Collectors.toList());
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top