Pregunta

Esto es lo que estoy haciendo:Tengo un evento de una fuente RSS que me dice que se editó un ticket.Para realizar los cambios en ese ticket, tengo que llamar a un servicio REST.

Así que quería hacerlo con un enfoque más compacto y funcional, pero se convirtió en una locura.Cuando, de hecho, el estilo antiguo de Java es así de 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;
}

Hubo un par de preguntas aquí relacionadas con esto que no parecían tener respuestas sencillas. Estoy haciendo esta pregunta para que haya un ejemplo muy específico y la pregunta sea muy clara:¿Es posible reelaborar esto con transmisiones y, de ser así, cómo?

Si las transmisiones no son buenas para cosas como esta, en realidad no sirven para mucho.La razón por la que digo esto es que este es un requisito muy común:que algún dato se enriquezca con más información de otra fuente.

¿Fue útil?

Solución

Lo que necesitas es flatMap, que puede mapear un solo ProcessEvent objeto de la lista de entrada a múltiples ProcessEventChange objetos y aplanar todos esos objetos en una sola corriente de ProcessEventChange.

List<ProcessEventChange> recentChanges = getLatestEvents().
         stream().
         flatMap(e -> getChanges(e).stream()).
         collect(Collectors.toList());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top