繁体   English   中英

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

[英]Remove some values from collection of collections using java streams

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

    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));

虽然从技术上讲,它不是 stream 解决方案,但它几乎与这些思路一致。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM