I may be not able to search properly but this is a query in theory is simple. I have list of arrays containing numbers. I want to filter list which match all entries from another list.
Say following is my list {1,2,3},{1,2},{1},{2},{3}, {2,3}
Now If my criteria list is {1,2} I should get following result {1,2,3},{1,2}
Basically I am looking for all match for criteria list. I tried using contains in predicate but its returns like or condition
//internally it creates array
products.add(new ProdData(344, 766));
products.add(new ProdData(344,123));
products.add(new ProdData(344,766,123));
List<Integer> matchingVolumes = new ArrayList<>();
matchingVolumes.add(344);
matchingVolumes.add(766);
products.stream()
.map(ProdData::getChemVolume)
.filter(p -> {return matchingVolumes.contains(p);})
.collect(Collectors.toList());
I want to match records # 1 and 3
products is list of ProdData objects from which chemVolume is the field I am trying to match the criteria. Order of entries does not matter.
Advertisement
Answer
What you seem to be looking for is:
.filter(p -> p.getAllChemVolumes().containsAll(matchingVolumes))
where you would need to define the getAllChemVolumes method within ProductData to return a Collection<Integer> based on the efficiency you seek.