Pergunta

Aqui está o que eu estou fazendo:Eu tenho um evento a partir de um feed RSS que está me dizendo que o Bilhete foi editado.Para obter as alterações feitas nessa passagem, eu tenho que chamar um serviço REST.

Então, eu queria fazer isso com um mais compacto, abordagem funcional, mas apenas se transformou em um monte de loucura.Quando na verdade, a reta de estilo antigo Java é simples:

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

Houve algumas perguntas aqui que relacionados a esse que parecem não ter respostas diretas, eu estou pedindo esta questão, de modo que não há um tipo muito específico de exemplo e a pergunta é clara como cristal:é o trabalho de reformulação isso com fluxos e se sim, como?

Se os fluxos não são boas para coisas como elas são, realmente, não é bom para muita coisa.A razão de eu dizer que este é um requisito muito comum:que algum pedaço de dados a ser enriquecida com mais informações de outra fonte.

Foi útil?

Solução

O que você precisa é de flatMap, que pode mapear um único ProcessEvent objeto da lista de entrada para vários ProcessEventChange objetos, e achate todos os objetos para um único Fluxo de ProcessEventChange.

List<ProcessEventChange> recentChanges = getLatestEvents().
         stream().
         flatMap(e -> getChanges(e).stream()).
         collect(Collectors.toList());
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top