简体   繁体   English

Java 8 Stream API收集器问题

[英]Java 8 Stream API Collector Issue

I'm traversing a graph by its edges and want to have a list of all sources and targets. 我正在遍历图形的边缘,并希望得到所有源和目标的列表。 This is what I have so far: 这是我到目前为止:

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;
}

Is there any way to get both source and target in the same mapping/collection step? 有没有办法在同一个映射/收集步骤中获取源和目标? Something like (PSEUDO-CODE): 像(PSEUDO-CODE)这样的东西:

edges.stream().collect(edge.getSource()).collect(edge.getTarget())

Or plain old Java 7 或普通的旧Java 7

for ( Edge e : edges ){
    vertices.add(e.getSource());
    vertices.add(e.getTarget());
}

Cheers, Daniel 干杯,丹尼尔

Set<Vertex> vertices = edges.stream()
    .flatMap(e -> Stream.of(e.getSource(), e.getTarget()))
    .collect(Collectors.toSet());

Yoy can use Misha's suggestion or write the collector manually: Yoy可以使用Misha的建议或手动编写收集器:

Set<String> vertices = this.edges.stream()
       .collect(HashSet::new, (set, edge) -> {
            set.add(edge.getSource());
            set.add(edge.getTarget());
          }, Set::addAll);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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