[英]Java Stream<Object> filter and then use the results
I don't understand how to use the results of filtering a Stream<>.我不明白如何使用过滤 Stream<> 的结果。 Example:例子:
Stream<Edge> edgesStr = graph.edges().filter(edge -> edge.getNode1() == graph.getNode(ip2));
The above successfully(?) filters the Edge stream, keeping only those edges where the getNode() methods are equal.以上成功(?)过滤了边缘流,只保留那些 getNode() 方法相等的边缘。 Now after this, I want to use those results, something like:现在在此之后,我想使用这些结果,例如:
//for each result
Node node = edgeStr.getNode(); //method getNode() exists for objects Edge
foo1(Node);
foo2(Node);
Note: graph.edges() returns a Stream<Edges>
.注意: graph.edges() 返回一个Stream<Edges>
。
You can collect
the results via some of the Collector
methods, ie toList
when collecting into a List
.您可以通过一些Collector
方法collect
结果,即收集到List
时的toList
。 In order to extract the Node
out of the Edge
you can use map
.为了从Edge
提取Node
,您可以使用map
。
List<Node> edges = graph.edges()
.filter(edge -> edge.getNode1() == graph.getNode(ip2))
.map(edge -> edge.getNode())
.collect(Collectors.toList());
If you need to perform void operations foo1
and foo2
on a Node
element, for each edge, you can do it as:如果您需要在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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.