我不明白如何使用过滤流的结果<>。例:
Stream<Edge> edgesStr = graph.edges().filter(edge -> edge.getNode1() == graph.getNode(ip2));
上面的成功(?(过滤了边缘流,只保留那些getNode((方法相等的边缘。 在此之后,我想使用这些结果,如下所示:
//for each result
Node node = edgeStr.getNode(); //method getNode() exists for objects Edge
foo1(Node);
foo2(Node);
注意:graph.edges(( 返回一个Stream<Edges>
。
您可以通过一些Collector
方法collect
结果,即toList
收集成List
时。为了从Edge
中提取Node
,您可以使用map
.
List<Node> edges = graph.edges()
.filter(edge -> edge.getNode1() == graph.getNode(ip2))
.map(edge -> edge.getNode())
.collect(Collectors.toList());
如果需要对Node
元素执行foo1
和foo2
的空操作,则可以按如下方式执行:
graph.edges()
.filter(edge -> edge.getNode() == graph.getNode(ip2))
.map(edge -> edge.getNode()) // map edge to corresponding Node
.forEach(node -> { foo1(node); foo2(node);}); // calls foo1 and foo2 on each node