想象一个集合(集合的集合)。
Set<Set<Long>> setOfSets = new HashSet<>();
Set<Long> set = new HashSet<>();
set.add(4L);
set.add(3L);
set.add(8L);
setOfSets.add(set);
set = new HashSet<>();
set.add(6L);
set.add(7L);
set.add(4L);
setOfSets.add(set);
我如何使用java流从这个集合中删除给定值?例如,如果给定的值是4,那么预期的集合应该等于{[3,8][6,7]}。我知道使用嵌套for循环在集合中迭代是可能的,但我对使用流特别感兴趣。
Set<Set<Long>> result = setOfSets.stream()
.map(s -> s.stream()
.filter(id -> (id != 4L))
.collect(Collectors.toSet()))
.collect(Collectors.toSet());
由于它们是逐个传递引用的,所以你可以直接突变它们。
int removeNum = 4;
setOfSets.forEach(s -> s.remove(removeNum));
//add it to each
setOfSets.forEach(s -> s.add(removeNum));
虽然它不是 技术上 一流的解决方案,它的思路差不多就是这样。