/java-async-generator

a Java version of Javascript async generator

Primary LanguageJavaMIT LicenseMIT

java-async-generator

A Java version of Javascript async generator. Idea is to create an iterator-like interface that emit elements as CompletableFuture ( the Java counterpart of Javascript Promise ) enabling asynchronous iteration over data

Releases

Note: ‼️

From release 3.0.0 the miminum supported Java version is the Java 17 and will not be longer available the artifact async-generator-jdk8

Installation

Maven

<dependency>
    <groupId>org.bsc.async</groupId>
    <artifactId>async-generator</artifactId>
    <version>3.2.2</version> <!-- Or the current snapshot version -->
</dependency>

Samples

Create an Async Generator to make multiple API calls

AsyncGenerator<Response> makeMultipleApiCalls(List<RequestData> requestsData) {
    return AsyncGenerator.map(requestsData, requestData -> {

                CompletableFuture<Response> res = asyncApiCall( requestData );

                return res;
    });
    
}

List<RequestData> resquestsData = .... 

// can iterate using lambda function (Consumer)
makeMultipleApiCalls( resquestsData )
        .forEachAsync( response -> logger.info( "Api response: " + response ) )
        .join();

// can iterate using classic for( : )
AsyncGenerator<Response> generator = makeMultipleApiCalls( resquestsData );

for( Response response : generator ) {
    logger.info( "Api response: " + response )
}        

Articles: