【发布时间】: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 不允许我做下一张地图。
你能给点提示吗?
【问题讨论】:
-
请改用
flatMap。flatMap(node -> node.getConnections().stream()) -
旁注:您可能需要重新考虑您的 API。为什么要将节点名称包装在 Node 中,然后在连接它们时将它们称为 String? connectNodes 应该采用 Node 类型。
-
是的,一开始我尝试连接节点(节点,节点),但由于 HashSet,获得节点的时间真的很糟糕。现在我在 Node 对象中使用 id 作为字符串。你有更好的方法吗? @SergheyBishyr,谢谢老兄,我试试看。
标签: java java-stream graph-algorithm hashset