【问题标题】:Remove some values from collection of collections using java streams使用 java 流从集合中删除一些值
【发布时间】:2020-06-03 14:23:53
【问题描述】:

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

    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 java-stream


    【解决方案1】:
    Set<Set<Long>> result = setOfSets.stream()
                                     .map(s -> s.stream()
                                                .filter(id -> (id != 4L))
                                                .collect(Collectors.toSet()))
                                     .collect(Collectors.toSet());
    

    【讨论】:

      【解决方案2】:

      由于它们是按引用传递的,因此您可以直接对它们进行变异:

      int removeNum = 4;
      setOfSets.forEach(s -> s.remove(removeNum));
      
      //add it to each
      setOfSets.forEach(s -> s.add(removeNum));
      

      虽然它技术上不是一个流解决方案,但它几乎是沿着这些思路。

      【讨论】:

        猜你喜欢
        • 2014-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-22
        • 2016-08-02
        • 1970-01-01
        • 1970-01-01
        • 2021-05-05
        相关资源
        最近更新 更多