-
Notifications
You must be signed in to change notification settings - Fork 51
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.
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"]
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<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<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<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]
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";
}