### Question:
HarmonicCentralityProc extends AlgoBaseProc<HarmonicCentrality, HarmonicCentrality, HarmonicCentralityConfig> { @Procedure(name = "gds.alpha.closeness.harmonic.stream", mode = READ) @Description(DESCRIPTION) public Stream<StreamResult> stream( @Name(value = "graphName") Object graphNameOrConfig, @Name(value = "configuration", defaultValue = "{}") Map<String, Object> configuration ) { var computationResult = compute(graphNameOrConfig, configuration); var algorithm = computationResult.algorithm(); var graph = computationResult.graph(); if (graph.isEmpty()) { graph.release(); return Stream.empty(); } return LongStream.range(0, graph.nodeCount()) .boxed() .map(nodeId -> new StreamResult(graph.toOriginalNodeId(nodeId), algorithm.getCentralityScore(nodeId))); }  @Procedure(name = "gds.alpha.closeness.harmonic.stream", mode = READ) @Description(DESCRIPTION) Stream<StreamResult> stream(
        @Name(value = "graphName") Object graphNameOrConfig,
        @Name(value = "configuration", defaultValue = "{}") Map<String, Object> configuration
    ); @Procedure(value = "gds.alpha.closeness.harmonic.write", mode = WRITE) @Description(DESCRIPTION) Stream<CentralityScore.Stats> write(
        @Name(value = "graphName") Object graphNameOrConfig,
        @Name(value = "configuration", defaultValue = "{}") Map<String, Object> configuration
    );  }### Answer:
@Test void testStream() { var query = GdsCypher.call() .withAnyLabel() .withAnyRelationshipType() .algo("gds.alpha.closeness.harmonic") .streamMode() .yields("nodeId", "centrality"); var resultMap = new HashMap<Long, Double>(); runQueryWithRowConsumer(query, row -> { resultMap.put( row.getNumber("nodeId").longValue(), row.getNumber("centrality").doubleValue() ); }); validateResult(resultMap); }