2017-05-03 16 views
0

我開始學習流API,但無法通過這一個。來自一組對象的流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不允許我做下一個地圖。

你能提供一些提示嗎?

+1

改爲使用'flatMap'。 'flatMap(node - > node.getConnections()。stream())' –

+0

備註:您可能想重新考慮您的API。爲什麼要在節點中包裝節點名稱,但在連接它們時將它們作爲字符串引用? connectNodes應該採用Node類型。 – aglassman

+0

是的,一開始我試圖連接節點(節點,節點),但由於HashSet的原因,獲得該節點真的很糟糕。現在我在節點對象中使用id作爲字符串。你有更好的方法嗎? @SergheyBishyr,謝謝,我會試試看。 – Jump3r

回答

0

使用flatMap作爲Serghey建議的作品就像魅力一樣。

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