Skip to content

Commit ef79ada

Browse files
committed
- fix on OrderBy: no longer creating a unnecessary IterableStream
- unit tests now with 100% code coverage
1 parent 4219e0f commit ef79ada

File tree

7 files changed

+55
-11
lines changed

7 files changed

+55
-11
lines changed

src/main/java/br/com/zbra/androidlinq/AbstractStream.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
import java.math.BigDecimal;
88
import java.util.*;
99

10-
import static br.com.zbra.androidlinq.Linq.stream;
11-
1210
abstract class AbstractStream<T> implements Stream<T> {
1311

1412
protected Iterator<T> reverseIterator() {
@@ -54,7 +52,7 @@ public <R extends Comparable<R>> Stream<T> orderBy(Selector<T, R> keySelector) {
5452

5553
@Override
5654
public <R> Stream<T> orderByDescending(Selector<T, R> keySelector, Comparator<R> comparator) {
57-
return stream(new OrderByDescendingStream<>(this, keySelector, comparator));
55+
return new OrderByDescendingStream<>(this, keySelector, comparator);
5856
}
5957

6058
@Override

src/main/java/br/com/zbra/androidlinq/IterableStream.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package br.com.zbra.androidlinq;
22

3-
import java.util.ArrayList;
43
import java.util.Iterator;
5-
import java.util.List;
64

75
class IterableStream<T> extends AbstractStream<T> {
86

src/main/java/br/com/zbra/androidlinq/Linq.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
*/
99
public final class Linq {
1010

11-
private Linq() { }
11+
private Linq() {
12+
throw new UnsupportedOperationException();
13+
}
1214

1315
/**
1416
* Decorates the passed {@code iterable} with a Stream.

src/main/java/br/com/zbra/androidlinq/ListStream.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.util.Iterator;
44
import java.util.List;
5-
import java.util.ListIterator;
65

76

87
class ListStream<T> extends AbstractStream<T> {

src/main/java/br/com/zbra/androidlinq/MapStream.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package br.com.zbra.androidlinq;
22

33
import java.util.Iterator;
4-
import java.util.LinkedList;
54
import java.util.Map;
6-
import java.util.SortedSet;
75

86
public class MapStream<K, V> extends AbstractStream<Map.Entry<K, V>> {
97

src/test/groovy/br/com/zbra/androidlinq/LinqTest.groovy

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,19 @@
11
package br.com.zbra.androidlinq
22

3+
import java.lang.reflect.Constructor
4+
35
import static br.com.zbra.androidlinq.Linq.stream
46

57
class LinqTest extends GroovyTestCase {
8+
9+
void testConstructor() {
10+
Constructor<Linq> constructor = Linq.class.getDeclaredConstructor();
11+
constructor.setAccessible(true);
12+
shouldFailWithCause(UnsupportedOperationException.class, {
13+
constructor.newInstance();
14+
});
15+
}
16+
617
void testArrayStream() {
718
def array = 0..9 as int[]
819
def arrayStream = stream(array)
@@ -50,5 +61,9 @@ class LinqTest extends GroovyTestCase {
5061

5162
assert stream(new HashMap<String, Integer>()).toList() == []
5263
assert stream(new HashMap<String, Integer>()).reverse().toList() == []
64+
65+
assert stream(map).count() == map.size()
66+
assert stream(new HashMap<String, Integer>()).count() == 0
67+
5368
}
5469
}

src/test/groovy/br/com/zbra/androidlinq/StreamTest.groovy

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ class StreamTest extends GroovyTestCase {
2020

2121
assert integers.collect { it * 2 } == stream.toList()
2222
assert integers.reverse().collect { it * 2 } == stream.reverse().toList()
23+
24+
assert integers.size() == stream.count()
2325
}
2426

2527
void testSelectMany() {
@@ -71,9 +73,10 @@ class StreamTest extends GroovyTestCase {
7173
assert result.get(1).elements.toList() == [1, 3, 5, 7, 9]
7274

7375
// groupBy with key and element selectors
74-
result = stream(integers)
76+
def groupByStream = stream(integers)
7577
.groupBy(keySelector, elementSelector)
76-
.toList()
78+
79+
result = groupByStream.toList()
7780

7881
assert result.size() == 2
7982

@@ -82,6 +85,14 @@ class StreamTest extends GroovyTestCase {
8285

8386
assert result.get(1).key == "Odd"
8487
assert result.get(1).elements.toList() == [10, 30, 50, 70, 90]
88+
89+
// test reverse
90+
def reverseResult = groupByStream.reverse().toList()
91+
assert reverseResult.get(0).key == "Odd"
92+
assert reverseResult.get(0).elements.toList() == [10, 30, 50, 70, 90]
93+
94+
assert reverseResult.get(1).key == "Even"
95+
assert reverseResult.get(1).elements.toList() == [00, 20, 40, 60, 80]
8596
}
8697

8798
void testOrderBy() {
@@ -104,6 +115,13 @@ class StreamTest extends GroovyTestCase {
104115
.orderBy({ n -> n }, { n1, n2 -> n1 - n2 })
105116
.toList()
106117

118+
119+
// orderBy count()
120+
assert shuffledItems.size() ==
121+
stream(shuffledItems)
122+
.orderBy({ n -> n }, { n1, n2 -> n1 - n2 })
123+
.count()
124+
107125
// orderBy descending
108126
assert integersDescending ==
109127
stream(shuffledItems)
@@ -150,6 +168,10 @@ class StreamTest extends GroovyTestCase {
150168
assert stream(integers).take(10).toList().size() == 10
151169
// takes 100 items (get all items)
152170
assert stream(integers).take(100).toList().size() == 10
171+
// takes 5 and count
172+
assert stream(integers).take(5).count() == 5
173+
// takes 5 and reverses
174+
assert stream(integers).take(5).reverse().toList() == [4, 3, 2, 1, 0]
153175
}
154176

155177
void testSkip() {
@@ -170,6 +192,10 @@ class StreamTest extends GroovyTestCase {
170192
assert stream(integers).skip(10).toList().size() == 0
171193
// skips 100 items (more than present in the collection)
172194
assert stream(integers).skip(100).toList().size() == 0
195+
// skips 5 and count
196+
assert stream(integers).skip(5).count() == 5
197+
// skips 5 and reverses
198+
assert stream(integers).skip(5).reverse().toList() == [9, 8, 7, 6, 5]
173199
}
174200

175201
void testDistinct() {
@@ -379,4 +405,12 @@ class StreamTest extends GroovyTestCase {
379405
assert stream([]).toMap(keySelector).isEmpty()
380406
assert stream([]).toMap(keySelector, elementSelector).isEmpty()
381407
}
408+
409+
void testReverse() {
410+
def integers = 0..9
411+
412+
assert integers ==
413+
stream(integers).reverse().reverse().toList()
414+
}
382415
}
416+

0 commit comments

Comments
 (0)