en:
No soy capaz de convertir a continuación fragmento en formato de flujo de Java 8.
List<String> titles = Arrays.asList("First Name", "Last Name");
for (FirstClass first : firstClassList) {
for (SecondClass second : first.getSecondClassList()) {
for (ThirdClass third : second.getThirdClassList()) {
if(!titles.contains(third.getField())) {
second.getThirdClassList().remove(third);
}
}
}
}
Estoy comparando lista anidada tercer nivel de objeto con la lista de entrada de campos. Si los campos no son coincidentes luego les estoy quitando de la lista original. ¿Cómo puedo lograr esto usando la sintaxis de Java 8.
Editar: Quiero Lista de FirstClass® a ser devuelto.
Misha:
No creo que las corrientes que ganar nada en este caso. Todo lo que hacemos es iterar sobre las listas anidadas y, o bien el ciclo mejorado o forEach
es más directo.
Las mejoras pueden venir de usar removeIf
para modificar la lista y, posiblemente, se mueva la lógica rechazo fuera del bucle:
Predicate<ThirdClass> reject = third -> !titles.contains(third.getField());
firstClassList.forEeach(first ->
first.getSecondClassList().forEach(second ->
second.getThirdClassList().removeIf(reject)
)
);