Java 来自对象集的流API对象

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

我开始学习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

    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作为字符串。你有更好的方法吗@谢了,伙计,我来试试。