Skip to content

For Comprehension Examples

johnmcclean-aol edited this page Feb 24, 2016 · 2 revisions

Cyclops has merged with simple-react. Please update your bookmarks (stars :) ) to https://github.com/aol/cyclops-react

All new develpoment on cyclops occurs in cyclops-react. Older modules are still available in maven central.

screen shot 2016-02-22 at 8 44 42 pm

CompletableFuture example

CompletableFuture<String> f =   CompletableFuture.completedFuture("hello world");
CompletableFuture<String> f2 = CompletableFuture.completedFuture("2");
CompletableFuture<String> f3 = CompletableFuture.completedFuture("3");
CompletableFuture<String> result = Do.add(f)
				     .add(f2)
				     .add(f3) 
				     .yield(v1->v2->v3 -> v1 +v2 +v3)
				     .unwrap();

//CompletableFuture["hello world23"]

List example

Stream<Double> s = Do.add(asList(10.00,5.00,100.30))
		     .filter( d-> d > 10.00)
		     .yield(base -> base+10) //AnyM[List[Integer]]]
		     .toSequence(); 
		
double total = s.collect(Collectors.summingDouble(t->t));
//total = 110.3

Stream example

Stream<Double> s =  Do.addStream(Stream.of(10.00,5.00,100.30))
		       .withStream(d->Stream.of(2.0))
		       .yield( base -> bonus-> base*(1.0+bonus)).unwrap();
		
double total = s.collect(Collectors.summingDouble(t->t));
//total = 345.9

Stream and CompletableFuture

Stream<String> results1 = Do.addStream(Stream.of("first","second"))
			    .add(CompletableFuture.supplyAsync(this::loadData))
			    .yield((String local) -> (String loadedData)-> loadedData + ":" + local )
                            .unwrap();

//Stream("first:loaded","second:loaded")

LazyFutureStream example

LazyFutureStream<Integer> result = Do.add(LazyFutureStream.of(1,2,3))
				     .add(Optional.of(2))
				     .yield(a->b-> a+b)
				     .unwrap();
												
List<Integer> blocked = result.block();
		
//List[3,4,5]

Future Cappuccino

		
		CompletableFuture<String> result = 	Do.add(grind("arabica beans"))
							  				 .add(heatWater(new Water(25)))
							  				 .withCompletableFuture(ground -> water -> brew(ground,water))
							  				 .add(frothMilk("milk"))
							  				 .yield(ground ->water -> espresso->foam-> combine(espresso,foam))
							  				 .unwrap();
		
		System.out.println(result.join());

//cuppuccino
	
	
	
	
	CompletableFuture<String> grind(String beans) {
		 return CompletableFuture.completedFuture("ground coffee of "+ beans);
	}

	CompletableFuture<Water> heatWater(Water water){
		 return CompletableFuture.supplyAsync((Supplier) ()->water.withTemperature(85));
		  
	}

	CompletableFuture<String> frothMilk(String milk) {
		 return CompletableFuture.completedFuture("frothed " + milk);
	}

	CompletableFuture<String>	brew(String coffee, Water heatedWater){
		  return CompletableFuture.completedFuture("espresso");
	}
	String combine(String espresso ,String frothedMilk) {
		return "cappuccino";
	}
Clone this wiki locally