Listas aninhadas Java Stream

Olá a todos,

Tenho dúvidas referente como usar listas aninhadas com Stream do Java 8. Cheguei a tentar algumas formas mas nenhuma chegou a ser eficiente.
Por exemplo como poderia fazer a seguinte condição:

for (Empregado empregado : empregados) {
    List<Pessoa> pessoas = empregado.getPessoa();
        for (Pesoa pessoa : pessoas) {
	        List<Verba> verbas = pessoa.getVerba();
	            for (Verba verba : verbas) {
	               if(verba.getNomeVerba().equals("verba1")){
		               System.out.println("ENTROU!!!");
	               }
	            }
            }
         }

Cara, eu não costumo usar lambda/stream para esses casos até por que faço uso mais simples.

Mas daria para fazer algo bizonho assim:

		eList
		.stream()
		.filter(Objects::nonNull)
		.forEach(emp -> emp.getPessoa()
				.stream()
				.filter(Objects::nonNull)
				.forEach(pessoa -> pessoa.getVerba()
						.stream()
						.filter(Objects::nonNull)
						.forEach(verba -> {
			if (verba.getValor() == 1) {
				System.out.println(verba.getValor());
			}
		})));

Ou assim:

eList
		.stream().filter(Objects::nonNull)
		.flatMap(emp -> emp.getPessoa().stream().filter(Objects::nonNull))
		.flatMap(pessoa -> pessoa.getVerba().stream().filter(Objects::nonNull))
		.forEach(v-> System.out.println(v.getValor()));

Falar a verdade acho que está até errado isso. :sweat_smile:

Olá @JulioCesarSF obrigado pela resposta.

Tinha feito um pouco parecido com isso, só não tinha me atentado a esse filter null-safe e no fim ficou bem parecido com o primeiro exemplo por que só preciso passar pelos elementos, por isso não usei o flatMap ou o map.

Abraços.