【问题标题】:Java 8 Stream API Collector IssueJava 8 流 API 收集器问题
【发布时间】:2023-03-21 20:53:01
【问题描述】:

我正在通过边缘遍历图表,并希望获得所有来源和目标的列表。这是我目前所拥有的:

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

干杯,丹尼尔

【问题讨论】:

    标签: java java-8 java-stream collectors


    【解决方案1】:
    Set<Vertex> vertices = edges.stream()
        .flatMap(e -> Stream.of(e.getSource(), e.getTarget()))
        .collect(Collectors.toSet());
    

    【讨论】:

      【解决方案2】:

      Yoy 可以参考 Misha 的建议,也可以手动编写收集器:

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

      【讨论】:

        猜你喜欢
        • 2014-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多