I have Employee object that has 3 fields: name, role, companyName.
I need to filter Employee objects based on a role property.
Despite that I'm applying filter in the stream in the code below, it's returning the entire data.
My code:
public static Map<String, List<? extends Employee>> testMappingFilter(List<Employee> emp) {
Map<String, List<? extends Employee>> dataInput = new HashMap<>();
for (Employee entry : emp) {
dataInput.put("senior", new ArrayList(emp));
dataInput.put("junior", new ArrayList(emp));
}
Map<String, List<? extends Employee>> dataResponse = new HashMap<>();
Set<String> realmroles = new HashSet<>();
realmroles.add("admin");
realmroles.add("user");
Either<Map<String, List<? extends Employee>>, ResponseFormat> followedResourcesServices = Either.left(dataInput);
realmroles.stream().forEach(role ->
followedResourcesServices.left().value().entrySet().stream()
.filter(elements -> elements.getValue().stream().anyMatch(i -> ((Employee) i).getRole().contains(role)))
.forEach(elements -> dataResponse.put(elements.getKey(), elements.getValue())));
return dataResponse;
}
Sample data:
Expected Output:
(expected roles are only "admin" and "user", data related to role "super" should not come)
{ “senior” :
[ { ”name”:”ABC”, “role”:”admin”, “companyName”:”ABC &Co” },
{ ”name”:”XYZ”, “role”:”admin”, “companyName”:”XYZ &Co” },
{ ”name”:”RST”, “role”:”user”, “companyName”:”RST &Co” } ],
“junior” :
[ { ”name”:”ABC”, “role”:”admin”, “companyName”:”ABC &Co” },
{ ”name”:”XYZ”, “role”:”admin”, “companyName”:”XYZ &Co” },
{ ”name”:”RST”, “role”:”user”, “companyName”:”RST &Co” } ]
}
Actual output:
{ “senior” :
[ { ”name”:”ABC”, “role”:”admin”, “companyName”:”ABC &Co” },
{ ”name”:”DDD”, “role”:”super”, “companyName”:”DDD &Co” },
{ ”name”:”XYZ”, “role”:”admin”, “companyName”:”XYZ &Co” },
{ ”name”:”RST”, “role”:”user”, “companyName”:”RST &Co” } ],
“junior” :
[ { ”name”:”ABC”, “role”:”admin”, “companyName”:”ABC &Co” },
{ ”name”:”DDD”, “role”:”super”, “companyName”:”DDD &Co” },
{ ”name”:”XYZ”, “role”:”admin”, “companyName”:”XYZ &Co” },
{ ”name”:”RST”, “role”:”user”, “companyName”:”RST &Co” } ]
}