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.