marti6addams:
Estoy tratando de utilizar Java 8 para resolver el problema siguiente. Decir que tengo la siguiente ( A
y B
son clases personalizadas)
ArrayList<A> skills;
HashSet<B> workCenters;
Lo que tengo que hacer es encontrar si el valor a.getDepartment()
que se una String
también contenida en B
el cual también tiene un método String getDepartment()
y después de recoger aquellos en los nuevos List<A>
.
Probé tales:
List<A> collect = skills.stream()
.filter(s -> workCenters.contains(s.getDepartment())
.collect(Collectors.toList());
pero en este caso no hago las cosas bien porque no podía recuperar getDepartment()
a partir workCenters
. ¿Cuál sería la solución correcta?
ernest_k:
Se podría empezar con la conversión HashSet<B>
a HashSet<String>
y luego usar su código:
Set<String> bDeps = workCenters.stream()
.map(B::getDepartment)
.collect(Collectors.toSet());
List<A> collect = skills.stream()
.filter(s -> bDeps.contains(s.getDepartment()))
.collect(Collectors.toList());