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 tudoObjects 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.

questionAnswers(6)

yourAnswerToTheQuestion