使用java流从集合的集合中删除一些值

问题描述 投票:0回答:1

想象一个集合(集合的集合)。

    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循环在集合中迭代是可能的,但我对使用流特别感兴趣。

java collections stream
1个回答
1
投票
Set<Set<Long>> result = setOfSets.stream()
                                 .map(s -> s.stream()
                                            .filter(id -> (id != 4L))
                                            .collect(Collectors.toSet()))
                                 .collect(Collectors.toSet());

1
投票

由于它们是逐个传递引用的,所以你可以直接突变它们。

int removeNum = 4;
setOfSets.forEach(s -> s.remove(removeNum));

//add it to each
setOfSets.forEach(s -> s.add(removeNum));

虽然它不是 技术上 一流的解决方案,它的思路差不多就是这样。

© www.soinside.com 2019 - 2024. All rights reserved.