Java 来自对象集的流API对象
我开始学习streamapi,但这次没能学完 我正在实现图形,所以我有这样的类: 图形->节点->边 图中的节点存储在Hashset中;节点中的边也是 以下是代码:Java 来自对象集的流API对象,java,java-stream,graph-algorithm,hashset,Java,Java Stream,Graph Algorithm,Hashset,我开始学习streamapi,但这次没能学完 我正在实现图形,所以我有这样的类: 图形->节点->边 图中的节点存储在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 S
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);
我不知道最后一行下一步该怎么办。
此时,它返回一组边
我试过了
g.getNodes().stream().map(Node::getConnections).map(x->x.getNodeB().getName()).forEach(System.out::println);
要通过边缘节点名称获得第二个连接,
但是IDE不允许我做下一张地图
你能给我一些提示吗?按照Serghey的建议使用flatMap很有魅力
g.getNodes().stream().map(Node::getConnections).flatMap(x->x.stream()).map(x->x.getNodeB().getName()).forEach(System.out::println);
改用
flatMap
flatMap(节点->节点.getConnections().stream())
旁注:您可能需要重新考虑API。为什么要将节点名称包装在节点中,但在连接它们时将它们称为字符串?connectNodes应该采用节点类型。是的,一开始我尝试连接节点(Node,Node),但由于HashSet的原因,获取节点的时间非常糟糕。现在我在节点对象中使用id作为字符串。你有更好的方法吗@谢了,伙计,我来试试。