简体   繁体   English

Java流<Object>过滤然后使用结果

[英]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元素上执行空操作foo1foo2 ,对于每条边,您可以这样做:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM