【问题标题】:Stream API object from set of objects从一组对象流式传输 API 对象
【发布时间】:2017-05-03 16:16:24
【问题描述】:

我开始学习 Stream API,但无法通过这个。

我正在实现图表,所以我有这样的类:

图形 -> 节点 -> 边

图中的节点存储在Hashset中;节点中的边也是。

代码如下:

    Graph g = new Graph("Graph 1");
    g.addNode(new Node("A"));
    g.addNode(new Node("B"));
    g.connectNodes("A","B", true); //nodeA, nodeB, bidirectional

    System.out.println(g);

    g.getNodes().stream().map(Node::getConnections);

我不知道最后一行的下一步是什么。 此时它返回边缘的 HashSet。

我试过了

    g.getNodes().stream().map(Node::getConnections).map(x->x.getNodeB().getName()).forEach(System.out::println);

通过边缘节点名称获得第二个连接, 但 IDE 不允许我做下一张地图。

你能给点提示吗?

【问题讨论】:

  • 请改用flatMapflatMap(node -> node.getConnections().stream())
  • 旁注:您可能需要重新考虑您的 API。为什么要将节点名称包装在 Node 中,然后在连接它们时将它们称为 String? connectNodes 应该采用 Node 类型。
  • 是的,一开始我尝试连接节点(节点,节点),但由于 HashSet,获得节点的时间真的很糟糕。现在我在 Node 对象中使用 id 作为字符串。你有更好的方法吗? @SergheyBishyr,谢谢老兄,我试试看。

标签: java java-stream graph-algorithm hashset


【解决方案1】:

按照 Serghey 的建议使用 flatMap 就像一种魅力。

g.getNodes().stream().map(Node::getConnections).flatMap(x->x.stream()).map(x->x.getNodeB().getName()).forEach(System.out::println);

【讨论】:

    猜你喜欢
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2021-06-16
    相关资源
    最近更新 更多