Guest User

Untitled

a guest
May 20th, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. package it.r.rx;
  2.  
  3. import org.apache.commons.lang.RandomStringUtils;
  4. import rx.Observable;
  5. import rx.functions.Action1;
  6. import rx.schedulers.Schedulers;
  7.  
  8. import java.util.List;
  9. import java.util.Random;
  10. import java.util.stream.Collectors;
  11. import java.util.stream.Stream;
  12.  
  13. public class Main {
  14.  
  15. public static void main(String[] args) {
  16. final List<String> result = Observable.from(new Integer[]{4, 5, 6, 6, 7, 3})
  17. .doOnNext(debug("Init"))
  18. .flatMap(i -> Observable.defer(() -> toRandomList(i)).subscribeOn(Schedulers.io()))
  19. .doOnNext(debug("defer"))
  20. .flatMap(Main::chooseString)
  21. .doOnNext(debug("chooseString"))
  22. .toList()
  23. .doOnNext(debug("list"))
  24. .toBlocking()
  25. .single();
  26. System.out.println("\nresult = " + result);
  27. }
  28.  
  29.  
  30. public static Observable<List<String>> toRandomList(Integer n) {
  31. debug("perform IO").call(n);
  32. try {
  33. Thread.sleep(new Random().nextInt(3000));
  34. } catch (InterruptedException e) {
  35. e.printStackTrace();
  36. }
  37. debug("IO done").call(n);
  38. final List<String> result = Stream.iterate(0, t -> t + 1)
  39. .map(i -> RandomStringUtils.randomAlphanumeric(n))
  40. .limit(n)
  41. .collect(Collectors.toList());
  42. return Observable.just(result);
  43. }
  44.  
  45. public static Observable<String> chooseString(List<String> list) {
  46. if (Math.random() > .3) {
  47. return Observable.just(list.get(new Random().nextInt(list.size())));
  48. }
  49. else {
  50. return Observable.empty();
  51. }
  52. }
  53.  
  54. public static <T> Action1<T> debug(String s) {
  55. return o -> System.out.println(o + " | " + s + " | " + Thread.currentThread().getName());
  56. }
  57.  
  58. }
Add Comment
Please, Sign In to add comment