我有一组整数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());

10-05 20:14