2017-05-03 6 views
0

私はStream APIの学習を開始しましたが、この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が返されます。

私は 、第2のエッジノード名を経由して接続して取得する

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を再考したいかもしれません。 Nodeでノード名をラップするのはなぜですか?しかし、それらを接続するときはStringとして参照してください。 connectNodesはNode型を取ります。 – aglassman

+0

ええ、始めに、Node(Node、Node)に接続しようとしましたが、HashSetのためにNodeを取得するのに本当に悪い時間がありました。これで、NodeオブジェクトのidをStringとして使用します。より良いアプローチがありますか? @SergheyBishyr、感謝の仲間、私はそれを試してみましょう。 – Jump3r

答えて

0

flatmapをSergheyとして使用すると、魅力的な作品が提示されます。

g.getNodes().stream().map(Node::getConnections).flatMap(x->x.stream()).map(x->x.getNodeB().getName()).forEach(System.out::println); 
関連する問題