Dan*_*ber 2 java java-8 java-stream collectors
我正在遍历图形的边缘,并希望得到所有源和目标的列表.这是我到目前为止:
public Set<Vertex> getVertices(){
Set<Vertex> vertices = this.edges.stream().map(edge -> edge.getSource()).collect(Collectors.toSet());
vertices.addAll(this.edges.stream().map(edge -> edge.getTarget()).collect(Collectors.toSet()));
return vertices;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在同一个映射/收集步骤中获取源和目标?像(PSEUDO-CODE)这样的东西:
edges.stream().collect(edge.getSource()).collect(edge.getTarget())
Run Code Online (Sandbox Code Playgroud)
或普通的旧Java 7
for ( Edge e : edges ){
vertices.add(e.getSource());
vertices.add(e.getTarget());
}
Run Code Online (Sandbox Code Playgroud)
干杯,丹尼尔
Set<Vertex> vertices = edges.stream()
.flatMap(e -> Stream.of(e.getSource(), e.getTarget()))
.collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
Yoy可以使用Misha的建议或手动编写收集器:
Set<String> vertices = this.edges.stream()
.collect(HashSet::new, (set, edge) -> {
set.add(edge.getSource());
set.add(edge.getTarget());
}, Set::addAll);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |