Skip to content

Commit e1a6eb2

Browse files
committed
2.5 Added flatMapIterable examples
1 parent 28a6e60 commit e1a6eb2

File tree

1 file changed

+151
-0
lines changed

1 file changed

+151
-0
lines changed
Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
package itrx.chapter2.transforming;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.Iterator;
6+
import java.util.List;
7+
8+
import org.junit.Test;
9+
10+
import rx.Observable;
11+
import rx.observers.TestSubscriber;
12+
13+
public class FlatMapIterableTest {
14+
15+
public static class Range implements Iterable<Integer> {
16+
17+
private static class RangeIterator implements Iterator<Integer> {
18+
private int next;
19+
private final int end;
20+
21+
RangeIterator(int start, int count) {
22+
this.next = start;
23+
this.end = start + count;
24+
}
25+
26+
@Override
27+
public boolean hasNext() {
28+
return next < end;
29+
}
30+
31+
@Override
32+
public Integer next() {
33+
return next++;
34+
}
35+
36+
}
37+
38+
private final int start;
39+
private final int count;
40+
41+
public Range(int start, int count) {
42+
this.start = start;
43+
this.count = count;
44+
}
45+
46+
@Override
47+
public Iterator<Integer> iterator() {
48+
return new RangeIterator(start, count);
49+
}
50+
}
51+
52+
public static Iterable<Integer> range(int start, int count) {
53+
List<Integer> list = new ArrayList<>();
54+
for (int i=start ; i<start+count ; i++) {
55+
list.add(i);
56+
}
57+
return list;
58+
}
59+
60+
public void exampleFlatMapIterable() {
61+
Observable.range(1, 3)
62+
.flatMapIterable(i -> range(1, i))
63+
.subscribe(System.out::println);
64+
65+
// 1
66+
// 1
67+
// 2
68+
// 1
69+
// 2
70+
// 3
71+
}
72+
73+
public void exampleFlatMapIterableWithSelector() {
74+
Observable.range(1, 3)
75+
.flatMapIterable(
76+
i -> range(1, i),
77+
(ori, rv) -> ori * (Integer) rv)
78+
.subscribe(System.out::println);
79+
80+
// 1
81+
// 2
82+
// 4
83+
// 3
84+
// 6
85+
// 9
86+
}
87+
88+
public void exampleFlatMapLazyIterable() {
89+
Observable.range(1, 3)
90+
.flatMapIterable(
91+
i -> new Range(1, i),
92+
(ori, rv) -> ori * (Integer) rv)
93+
.subscribe(System.out::println);
94+
95+
// 1
96+
// 2
97+
// 4
98+
// 3
99+
// 6
100+
// 9
101+
}
102+
103+
104+
//
105+
// Test
106+
//
107+
108+
@Test
109+
public void testFlatMapIterable() {
110+
TestSubscriber<Integer> tester = new TestSubscriber<>();
111+
112+
Observable.range(1, 3)
113+
.flatMapIterable(i -> range(1, i))
114+
.subscribe(tester);
115+
116+
tester.assertReceivedOnNext(Arrays.asList(1,1,2,1,2,3));
117+
tester.assertTerminalEvent();
118+
tester.assertNoErrors();
119+
}
120+
121+
@Test
122+
public void testFlatMapIterableWithSelector() {
123+
TestSubscriber<Integer> tester = new TestSubscriber<>();
124+
125+
Observable.range(1, 3)
126+
.flatMapIterable(
127+
i -> range(1, i),
128+
(ori, rv) -> ori * (Integer) rv)
129+
.subscribe(tester);
130+
131+
tester.assertReceivedOnNext(Arrays.asList(1,2,4,3,6,9));
132+
tester.assertTerminalEvent();
133+
tester.assertNoErrors();
134+
}
135+
136+
@Test
137+
public void testFlatMapLazyIterable() {
138+
TestSubscriber<Integer> tester = new TestSubscriber<>();
139+
140+
Observable.range(1, 3)
141+
.flatMapIterable(
142+
i -> new Range(1, i),
143+
(ori, rv) -> ori * (Integer) rv)
144+
.subscribe(tester);
145+
146+
tester.assertReceivedOnNext(Arrays.asList(1,2,4,3,6,9));
147+
tester.assertTerminalEvent();
148+
tester.assertNoErrors();
149+
}
150+
151+
}

0 commit comments

Comments
 (0)