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