Como achatar todos os itens de uma coleção Java aninhada em uma única lista?
Dada uma coleção aninhada complexa de objetos como:
Set<List<Map<String, List<Object>>>> complexNestedCollection;
Existe um método genérico para nivelar isso e obter um únicoList
de tudoObject
s contido dentro?
Alguns detalhes:
A lista não deve incluir objetos de coleção ou chaves de mapa - apenas os valores no nível mais baixo.Ele deve seguir a mesma ordenação, sempre que possível - portanto, no exemplo, os itens da lista devem estar em ordem, enquanto a ordenação de mapas / conjuntos dependeria da implementação.Pode opcionalmente excluir duplicadosATUALIZAR: Idealmente, deve detectar / manusear referências circulares em qualquer nível, por ex. umaList<List<Object>>
onde a lista externa contém a si mesma como um membro. (Agradecemos a Adrian Jałoszewski por mencionar isso nos comentários abaixo).Nota: O caso de uso real é obter todas as Strings de umList<List<String>>
, o que pode ser feito facilmente com dois loops, mas me fez pensar sobre o caso geral.