- 
                Notifications
    
You must be signed in to change notification settings  - Fork 138
 
Example : Implementing a data cache
        johnmcclean-aol edited this page Jan 26, 2015 
        ·
        1 revision
      
    A SimpleReact dataflow stages can be cached, forked and merged. SimpleReact can be used to perform expensive processing asynchronously. Rather than accessing the raw results, the SimpleReact stage (or the underlying Stream can be cached.
Cached Stages can then be forked and resused unlimited times.
Stage<String> stage1 = new SimpleReact().<Integer> react(() -> 1,
			() -> 2, () -> 3).then(it -> "*" + it);
	Stage<String> stage2 = new SimpleReact().<Integer> react(() -> 4,
			() -> 5, () -> 6).then(it -> "*" + it);
	List<String> result1 = stage1.merge(stage2).then(it -> it +"*").block();
	List<String> result2 = stage1.merge(stage2).then(it -> it +"-").block();
	
	result1.stream().forEach( it-> assertThat(it,endsWith("*")));
	result2.stream().forEach( it-> assertThat(it,endsWith("-")));
Stream<CompletableFuture<String>> stream = new SimpleReact()
												.<Integer> react(() -> 1, () -> 2, () -> 3)
												.then(it -> "*" + it).stream();
	
	List<String> strings = new SimpleReact()
							.<String>fromStream(stream)
							.then(it ->  it + "*")
							.block();
	assertThat(strings.size(), is(3));
	
	
	assertThat(strings,hasItem("*1*"));
oops - my bad