Se eu tiver um List<List<Object>>
, como posso transformá-lo em um List<Object>
que contenha todos os objetos na mesma ordem de iteração usando os recursos do Java 8?
java
collections
java-8
Sarah Szabo
fonte
fonte
::
:)Class::method
parece um pouco estranho no começo, mas tem o benefício de declarar de que tipo de objeto você está mapeando. Isso é algo que você perde nos fluxos.flatmap
é melhor, mas existem outras maneiras de conseguir o mesmofonte
O
flatMap
método onStream
certamente pode achatar essas listas para você, mas deve criarStream
objetos para o elemento e, em seguida, umStream
para o resultado.Você não precisa de todos esses
Stream
objetos. Aqui está o código simples e conciso para executar a tarefa.Como a
List
éIterable
, esse código chama oforEach
método (recurso Java 8), que é herdado deIterable
.E um
List
'sIterator
retorna itens em ordem seqüencial.Para
Consumer
isso, esse código passa uma referência de método (recurso Java 8) para o método pré-Java 8List.addAll
para adicionar os elementos da lista interna sequencialmente.fonte
Você pode usar o
flatCollect()
padrão nas Coleções Eclipse .Se você não pode alterar a lista de
List
:Nota: Sou colaborador do Eclipse Collections.
fonte
Assim como @Saravana mencionou:
Em resumo, existem várias maneiras de obter o mesmo da seguinte maneira:
fonte
Eu só quero explicar mais um cenário como
List<Documents>
, esta lista contém mais algumas listas de outros documentos, comoList<Excel>
,List<Word>
,List<PowerPoint>
. Então a estrutura éAgora, se você deseja iterar o Excel apenas a partir de documentos, faça algo como abaixo.
Então o código seria
Espero que isso possa resolver o problema de alguém durante a codificação ...
fonte
Podemos usar o flatmap para isso, consulte o código abaixo:
fonte
Uma expansão na resposta de Eran, que foi a principal, se você tiver várias camadas de listas, poderá continuar mapeando-as.
Isso também vem com uma maneira prática de filtrar conforme você desce as camadas, se necessário também.
Então, por exemplo:
Isso seria semelhante no SQL a ter instruções SELECT nas instruções SELECT.
fonte
Método para converter um
List<List>
paraList
:Veja este exemplo:
Imprime:
fonte