当前位置: 首页 > 知识库问答 >
问题:

Java流-将流转换为流[复制]

羊舌高明
2023-03-14

我在处理流时遇到了一些麻烦。本质上,我有一个Map

public static synchronized List<Node> getNodes() {
        List<Node> nodes = new ArrayList<>();
        Collection<Bucket> bucketCollection = buckets.values();
        for (Bucket b : bucketCollection) {
            for (Node n : b.getNodes()) {
                nodes.add(n);
            }
        }
        return nodes;
    }

这就是工作和做它应该做的事情。然而,我在使用流重写这个函数时遇到了一些问题。我尝试了以下代码,但它不起作用,因为它返回了一个列表

public static synchronized List<Node> getNodes() {
        return buckets.values().stream()
                .map(Bucket::getNodes)
                .collect(Collectors.toList());
    }

话虽如此,在地图之后,我有一个


共有1个答案

印嘉泽
2023-03-14

map将一个“thingie”变成另一个“thingie”。一件事变成了一件事。这不是你想要的;你想让一件事情变成0到很多事情。你正在寻找的方法是flatMap。

return buckets.values().stream()
  .map(Bucket::getNodes)
  .flatMap(Set::stream)
  .collect(Collectors.toList())
  ;
 类似资料:
  • 我有一个int的二维数组,还有一个方法,它的参数指向它的一行。我想在该行中非零的元素上返回一个Set,并且不需要for循环。这就是我所尝试的: 不幸的是,我遇到了一个编译时错误,有点难以解析: 有什么想法吗?

  • 本文向大家介绍Java将可选流转换为值流,包括了Java将可选流转换为值流的使用技巧和注意事项,需要的朋友参考一下 示例 您可能需要一个转换Stream发射Optional到一个Stream值,从现有的发射只值Optional。(即:没有null价值,不与之打交道)。Optional.empty()            

  • 所以我想做的就是打印出字符,而不是ascii值。。。 这是输出: 有人知道怎么解决这个问题吗?

  • 我有一个,我希望将其转换为。在Java8之前,我会通过循环,将每个转换为并将其添加到新的,如下所示。

  • 我刚刚补充道 对这个项目。我有<code>suspend fun foo():Flow 我需要获得

  • 我要将转换为: 如果可选选项包含值,则流包含该值。 如果可选项不包含值,则流应为空。