diff --git a/README.md b/README.md index 3ecbfc3..4a23e21 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Reactive Streams in Java +### Reactive Programming in Java A sequential program runs on a flat timeline. Each task is only started after the previous one completes. In concurrent programs, multiple tasks may be running during the same time period and a new task may begin at any time. diff --git a/build.gradle b/build.gradle index 3653e15..f700440 100644 --- a/build.gradle +++ b/build.gradle @@ -11,6 +11,6 @@ repositories { } dependencies { - compile "io.reactivex:rxjava:1.0.0-rc.10" + compile "io.reactivex:rxjava:1.0.0" testCompile "junit:junit:4.11" } diff --git a/src/main/java/learnrxjava/ComposableListSolutions.java b/src/main/java/learnrxjava/ComposableListSolutions.java index 5df5b0b..c2256d2 100644 --- a/src/main/java/learnrxjava/ComposableListSolutions.java +++ b/src/main/java/learnrxjava/ComposableListSolutions.java @@ -793,7 +793,7 @@ public static ComposableList exercise19() { return v.boxarts.reduce((max, box) -> { int maxSize = max.height * max.width; int boxSize = box.height * box.width; - if(boxSize > maxSize) { + if(boxSize < maxSize) { return box; } else { return max; diff --git a/src/main/java/learnrxjava/ObservableExercises.java b/src/main/java/learnrxjava/ObservableExercises.java index 9f7f408..1b6b34b 100644 --- a/src/main/java/learnrxjava/ObservableExercises.java +++ b/src/main/java/learnrxjava/ObservableExercises.java @@ -7,7 +7,7 @@ public class ObservableExercises { /** - * Return an Observable that emits a single value "Hello World" + * Return an Observable that emits a single value "Hello World!" * * @return "Hello World!" */ @@ -38,7 +38,7 @@ public Observable exerciseFilterMap(Observable nums) { /** * Flatten out all video in the stream of Movies into a stream of videoIDs * - * @param movieLists + * @param movies * @return Observable of Integers of Movies.videos.id */ public Observable exerciseConcatMap(Observable movies) { @@ -55,7 +55,7 @@ public Observable exerciseConcatMap(Observable movies) { * * We'll see more about this later when we add concurrency. * - * @param movieLists + * @param movies * @return Observable of Integers of Movies.videos.id */ public Observable exerciseFlatMap(Observable movies) { @@ -72,7 +72,7 @@ public Observable exerciseReduce(Observable nums) { } /** - * Retrieve the id, title, and smallest box art url for every video. + * Retrieve the id, title, and smallest box art url for every video. * * Now let's try combining reduce() with our other functions to build more complex queries. * diff --git a/src/main/java/learnrxjava/ObservableSolutions.java b/src/main/java/learnrxjava/ObservableSolutions.java index 908ea57..405682a 100644 --- a/src/main/java/learnrxjava/ObservableSolutions.java +++ b/src/main/java/learnrxjava/ObservableSolutions.java @@ -98,7 +98,7 @@ public Observable exerciseMovie(Observable movies) { return v.boxarts.reduce((max, box) -> { int maxSize = max.height * max.width; int boxSize = box.height * box.width; - if (boxSize > maxSize) { + if (boxSize < maxSize) { return box; } else { return max; diff --git a/src/main/java/learnrxjava/examples/ScanVsReduceExample.java b/src/main/java/learnrxjava/examples/ScanVsReduceExample.java index 35afce5..495d7f1 100644 --- a/src/main/java/learnrxjava/examples/ScanVsReduceExample.java +++ b/src/main/java/learnrxjava/examples/ScanVsReduceExample.java @@ -5,16 +5,22 @@ import rx.Observable; public class ScanVsReduceExample { - public static void main(String... args) { - Observable.range(0, 10).reduce(() -> new ArrayList(), (list, i) -> { + System.out.println("reduce ..."); + Observable.range(0, 10).reduce(new ArrayList<>(), (list, i) -> { list.add(i); return list; }).forEach(System.out::println); - System.out.println("... vs ..."); + System.out.println("... vs collect ..."); + + Observable.range(0, 10).collect(() -> new ArrayList<>(), (list, i) -> { + list.add(i); + }).forEach(System.out::println); + + System.out.println("... vs scan ..."); - Observable.range(0, 10).scan(() -> new ArrayList(), (list, i) -> { + Observable.range(0, 10).scan(new ArrayList(), (list, i) -> { list.add(i); return list; }).forEach(System.out::println); diff --git a/src/main/java/learnrxjava/examples/UnitTesting.java b/src/main/java/learnrxjava/examples/UnitTesting.java index 398d4b2..c8f3221 100644 --- a/src/main/java/learnrxjava/examples/UnitTesting.java +++ b/src/main/java/learnrxjava/examples/UnitTesting.java @@ -1,5 +1,29 @@ package learnrxjava.examples; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; + +import rx.Observable; +import rx.observers.TestSubscriber; +import rx.schedulers.Schedulers; +import rx.schedulers.TestScheduler; + public class UnitTesting { + public static void main(String... args) { + TestScheduler test = Schedulers.test(); + TestSubscriber ts = new TestSubscriber<>(); + + Observable.interval(200, TimeUnit.MILLISECONDS, test) + .map(i -> { + return i + " value"; + }).subscribe(ts); + + test.advanceTimeBy(200, TimeUnit.MILLISECONDS); + ts.assertReceivedOnNext(Arrays.asList("0 value")); + + test.advanceTimeTo(1000, TimeUnit.MILLISECONDS); + ts.assertReceivedOnNext(Arrays.asList("0 value", "1 value", "2 value", "3 value", "4 value")); + } + } diff --git a/src/test/java/learnrxjava/ObservableSolutionsTest.java b/src/test/java/learnrxjava/ObservableSolutionsTest.java index d75ac96..a7e2fa7 100644 --- a/src/test/java/learnrxjava/ObservableSolutionsTest.java +++ b/src/test/java/learnrxjava/ObservableSolutionsTest.java @@ -168,13 +168,13 @@ public void exerciseMovie() { Map map = getImpl().exerciseMovie(movies).toMap(i -> (int) i.get("id")).toBlocking().single(); System.out.println(map); assertTrue(map.containsKey(70111470)); - assertEquals(map.get(70111470).toString(), "{boxart=http://cdn-0.nflximg.com/images/2891/DieHard200.jpg, id=70111470, title=Die Hard}"); + assertEquals(map.get(70111470).toString(), "{boxart=http://cdn-0.nflximg.com/images/2891/DieHard150.jpg, id=70111470, title=Die Hard}"); assertTrue(map.containsKey(654356453)); - assertEquals(map.get(654356453).toString(), "{boxart=http://cdn-0.nflximg.com/images/2891/BadBoys200.jpg, id=654356453, title=Bad Boys}"); + assertEquals(map.get(654356453).toString(), "{boxart=http://cdn-0.nflximg.com/images/2891/BadBoys140.jpg, id=654356453, title=Bad Boys}"); assertTrue(map.containsKey(65432445)); - assertEquals(map.get(65432445).toString(), "{boxart=http://cdn-0.nflximg.com/images/2891/TheChamber200.jpg, id=65432445, title=The Chamber}"); + assertEquals(map.get(65432445).toString(), "{boxart=http://cdn-0.nflximg.com/images/2891/TheChamber130.jpg, id=65432445, title=The Chamber}"); assertTrue(map.containsKey(675465)); - assertEquals(map.get(675465).toString(), "{boxart=http://cdn-0.nflximg.com/images/2891/Fracture300.jpg, id=675465, title=Fracture}"); + assertEquals(map.get(675465).toString(), "{boxart=http://cdn-0.nflximg.com/images/2891/Fracture120.jpg, id=675465, title=Fracture}"); } @Test