Problemas com cast - java (stream api)

Caros, necessito extrair um dado de uma Lista de objetos que contém uma outra lista de Objetos de sua estrutura.
Fiz todo o filtro para pegar exatamente as informações que necessito e após adentrei na lista de objeto com o map utilizando Stream API.
Se tento realizar o cast para uma List acontece o erro:

Exception in thread "main" java.lang.ClassCastException: class java.util.stream.ReferencePipeline$3 cannot be cast to class java.util.List (java.util.stream.ReferencePipeline$3 and java.util.List are in module java.base of loader 'bootstrap')
 	at com.vilt.AdobeSign.Control.Filter.TotalGroups(Filter.java:47)
 	at com.vilt.AdobeSign.AdobeSignApplication.main(AdobeSignApplication.java:21)

Estrutura do Objeto Agreements que estou retirando de um json:

"id": 
"type": 
"name": 
"groupId": 
"displayDate": 
"displayParticipantSetInfos": [{
  "displayUserSetMemberInfos": [{
    "fullName":
    "email":
    "company": 
  }]
}],
"latestVersionId": 
"status": 
"esign": 
"hidden": 

Código:

List<String> listaEmail = (List<String>) agreements.stream()
  .filter(a -> Objects.nonNull(a.getGroupId()))
  .filter(a -> a.getGroupId().equals(scanG.getGroupId()))
  .map(a -> a.getDisplayParticipantSetInfos().stream()
    .map(p -> p.getDisplayUserSetMemberInfos().stream()
      .map(u -> u.getEmail())
      .collect(Collectors.toList())
    )
  );

Alguém poderia me dizer o que estou fazendo de errado?

Por ser lista de lista, acredito que vc deveria tentar usar flatMap:

List<String> listaEmail = agreements.stream()
	.filter(a -> Objects.nonNull(a.getGroupId()))
	.filter(a -> a.getGroupId().equals(scanG.getGroupId()))
	.flatMap(a -> a.getDisplayParticipantSetInfos().stream())
	.flatMap(p -> p.getDisplayUserSetMemberInfos().stream())
	.map(u -> u.getEmail())
	.collect(Collectors.toList());

Cara, deu certo.
MUITO obrigado de verdade.
Estava a 2 dias travado nisso… Muito obrigado novamente!

1 curtida