我有一组整数set2和一个对象:
public class Bucket {
private Integer id;
private Set<Integer> set1;
...
}
我想使用流过滤存储桶,但仅使用set1与另一个set2相交的存储桶。我尝试了以下代码:
Set<Bucket> selectedBuckets = allBuckets.stream()
.filter(e -> Sets.intersection(e.getSet1(), set2).size()>1)
.collect(Collectors.toSet());
但这将返回allBuckets的所有元素,而不是仅返回其集合包含交集的元素。我怎样才能做到这一点 ?
最佳答案
假设您是指(Set
set1内容)与Bucket
中任何其他List
的交集,您可能要查找的内容:
List<Bucket> allBuckets = new ArrayList<>(); // as you may initialise
Set<Bucket> selectedBuckets = allBuckets.stream()
.filter(e -> allBuckets.stream()
.filter(f -> f != e)
.flatMap(b -> b.getSet1().stream())
.anyMatch(s -> e.getSet1().contains(s)))
.collect(Collectors.toSet());