Проблема с сборщиком Stream API Java 8

Я просматриваю граф по его краям и хочу иметь список всех источников и целей. Это то, что у меня есть до сих пор:

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

Есть ли способ получить как источник, так и цель на одном этапе сопоставления/сбора? Что-то вроде (ПСЕВДО-КОД):

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

Или старая добрая Java 7

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

Привет, Даниэль


person Daniel Gerber    schedule 29.08.2014    source источник


Ответы (1)


Yoy может воспользоваться предложением Миши или написать сборщик вручную:

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