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을 반환합니다.

나는

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

그래, 처음에 나는 노드 (노드, 노드)에 연결하려고했지만, HashSet 때문에 그 노드를 얻는 데 정말로 시간이 걸렸다. 이제 Node 객체에서 id를 String으로 사용합니다. 더 나은 접근 방법이 있습니까? @SergheyBishyr, 고마워요, 시도해 볼게요. – Jump3r

답변

0

플랫 맵을 세르게 (Serghey)로 사용하면 매력과 같은 작품을 제안합니다.

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