Skip to content

Commit 234fc8f

Browse files
committed
Update Iterables.
1 parent e1eceb9 commit 234fc8f

3 files changed

Lines changed: 75 additions & 75 deletions

File tree

README.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1137,39 +1137,39 @@ var number = cast("abc", Double.class); // null
11371137
The `Iterables` class contains methods for processing a sequence of values:
11381138

11391139
```java
1140-
public static <T, R> Iterable<R> mapAll(Iterable<T> iterable, Function<? super T, ? extends R> transform) { ... }
1141-
public static <T> Iterable<T> filter(Iterable<T> iterable, Predicate<? super T> predicate) { ... }
11421140
public static <T> T firstOf(Iterable<T> iterable) { ... }
1141+
public static <T> Iterable<T> filter(Iterable<T> iterable, Predicate<? super T> predicate) { ... }
1142+
public static <T, R> Iterable<R> mapAll(Iterable<T> iterable, Function<? super T, ? extends R> transform) { ... }
11431143

11441144
public static <T> boolean exists(Iterable<T> iterable, Predicate<? super T> predicate) { ... }
11451145
```
11461146

11471147
These are provided as a less complex alternative to similar methods defined by the `java.util.stream.Stream` class:
11481148

11491149
```java
1150-
var values = listOf("a", "ab", "abc");
1150+
var values = listOf(1, 2, 3);
11511151

1152-
var result = listOf(mapAll(values, String::length)); // 1, 2, 3
1152+
var result = firstOf(values); // 1
11531153
```
11541154

11551155
```java
1156-
var values = Arrays.asList(DayOfWeek.values());
1157-
1158-
var result = mapOf(mapAll(values, value -> entry(value, value.ordinal())));
1156+
var values = listOf(1, 2, 3);
11591157

1160-
var i = result.get(DayOfWeek.MONDAY); // 0
1158+
var result = listOf(filter(values, value -> value < 3)); // 1, 2
11611159
```
11621160

11631161
```java
1164-
var values = listOf(1, 2, 3);
1162+
var values = listOf("a", "ab", "abc");
11651163

1166-
var result = listOf(filter(values, value -> value < 3)); // 1, 2
1164+
var result = listOf(mapAll(values, String::length)); // 1, 2, 3
11671165
```
11681166

11691167
```java
1170-
var values = listOf(1, 2, 3);
1168+
var values = Arrays.asList(DayOfWeek.values());
11711169

1172-
var result = firstOf(values); // 1
1170+
var result = mapOf(mapAll(values, value -> entry(value, value.ordinal())));
1171+
1172+
var i = result.get(DayOfWeek.MONDAY); // 0
11731173
```
11741174

11751175
```java

kilo-client/src/main/java/org/httprpc/kilo/util/Iterables.java

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -23,26 +23,6 @@
2323
* Provides static utility methods for working with iterables.
2424
*/
2525
public class Iterables {
26-
private static class MapAllIterator<T, R> implements Iterator<R> {
27-
Iterator<T> iterator;
28-
Function<? super T, ? extends R> transform;
29-
30-
MapAllIterator(Iterator<T> iterator, Function<? super T, ? extends R> transform) {
31-
this.iterator = iterator;
32-
this.transform = transform;
33-
}
34-
35-
@Override
36-
public boolean hasNext() {
37-
return iterator.hasNext();
38-
}
39-
40-
@Override
41-
public R next() {
42-
return transform.apply(iterator.next());
43-
}
44-
}
45-
4626
private static class FilterIterator<T> implements Iterator<T> {
4727
Iterator<T> iterator;
4828
Predicate<? super T> predicate;
@@ -88,33 +68,49 @@ public T next() {
8868
}
8969
}
9070

71+
private static class MapAllIterator<T, R> implements Iterator<R> {
72+
Iterator<T> iterator;
73+
Function<? super T, ? extends R> transform;
74+
75+
MapAllIterator(Iterator<T> iterator, Function<? super T, ? extends R> transform) {
76+
this.iterator = iterator;
77+
this.transform = transform;
78+
}
79+
80+
@Override
81+
public boolean hasNext() {
82+
return iterator.hasNext();
83+
}
84+
85+
@Override
86+
public R next() {
87+
return transform.apply(iterator.next());
88+
}
89+
}
90+
9191
private Iterables() {
9292
}
9393

9494
/**
95-
* Transforms iterable contents.
95+
* Retrieves the first element from an iterable.
9696
*
9797
* @param <T>
9898
* The element type.
9999
*
100-
* @param <R>
101-
* The target type.
102-
*
103100
* @param iterable
104-
* The iterable to transform.
105-
*
106-
* @param transform
107-
* The transform function.
101+
* The iterable.
108102
*
109103
* @return
110-
* The transformed iterable.
104+
* The iterable's first element, or {@code null} if the iterable is empty.
111105
*/
112-
public static <T, R> Iterable<R> mapAll(Iterable<T> iterable, Function<? super T, ? extends R> transform) {
113-
if (iterable == null || transform == null) {
106+
public static <T> T firstOf(Iterable<T> iterable) {
107+
if (iterable == null) {
114108
throw new IllegalArgumentException();
115109
}
116110

117-
return () -> new MapAllIterator<>(iterable.iterator(), transform);
111+
var iterator = iterable.iterator();
112+
113+
return iterator.hasNext() ? iterator.next() : null;
118114
}
119115

120116
/**
@@ -141,25 +137,29 @@ public static <T> Iterable<T> filter(Iterable<T> iterable, Predicate<? super T>
141137
}
142138

143139
/**
144-
* Retrieves the first element from an iterable.
140+
* Transforms iterable contents.
145141
*
146142
* @param <T>
147143
* The element type.
148144
*
145+
* @param <R>
146+
* The target type.
147+
*
149148
* @param iterable
150-
* The iterable to search.
149+
* The iterable to transform.
150+
*
151+
* @param transform
152+
* The transform function.
151153
*
152154
* @return
153-
* The iterable's first element, or {@code null} if the iterable is empty.
155+
* The transformed iterable.
154156
*/
155-
public static <T> T firstOf(Iterable<T> iterable) {
156-
if (iterable == null) {
157+
public static <T, R> Iterable<R> mapAll(Iterable<T> iterable, Function<? super T, ? extends R> transform) {
158+
if (iterable == null || transform == null) {
157159
throw new IllegalArgumentException();
158160
}
159161

160-
var iterator = iterable.iterator();
161-
162-
return iterator.hasNext() ? iterator.next() : null;
162+
return () -> new MapAllIterator<>(iterable.iterator(), transform);
163163
}
164164

165165
/**

kilo-client/src/test/java/org/httprpc/kilo/util/IterablesTest.java

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -26,27 +26,16 @@
2626

2727
public class IterablesTest {
2828
@Test
29-
public void testMapAllToList() {
30-
var values = listOf("a", "ab", "abc");
31-
32-
var result = listOf(mapAll(values, String::length)); // 1, 2, 3
33-
34-
assertEquals(listOf(1, 2, 3), result);
35-
36-
assertEquals(result, values.stream().map(String::length).collect(Collectors.toList()));
37-
}
38-
39-
@Test
40-
public void testMapAllToMap() {
41-
var values = Arrays.asList(DayOfWeek.values());
29+
public void testFirstOf() {
30+
var values = listOf(1, 2, 3);
4231

43-
var result = mapOf(mapAll(values, value -> entry(value, value.ordinal())));
32+
var result = firstOf(values); // 1
4433

45-
var i = result.get(DayOfWeek.MONDAY); // 0
34+
assertEquals(1, result);
4635

47-
assertEquals(0, i);
36+
assertEquals(result, values.stream().findFirst().orElse(null));
4837

49-
assertEquals(result, values.stream().collect(Collectors.toMap(value -> value, Enum::ordinal)));
38+
assertNull(firstOf(listOf()));
5039
}
5140

5241
@Test
@@ -66,16 +55,27 @@ public void testFilter() {
6655
}
6756

6857
@Test
69-
public void testFirstOf() {
70-
var values = listOf(1, 2, 3);
58+
public void testMapAllToList() {
59+
var values = listOf("a", "ab", "abc");
7160

72-
var result = firstOf(values); // 1
61+
var result = listOf(mapAll(values, String::length)); // 1, 2, 3
7362

74-
assertEquals(1, result);
63+
assertEquals(listOf(1, 2, 3), result);
7564

76-
assertEquals(result, values.stream().findFirst().orElse(null));
65+
assertEquals(result, values.stream().map(String::length).collect(Collectors.toList()));
66+
}
7767

78-
assertNull(firstOf(listOf()));
68+
@Test
69+
public void testMapAllToMap() {
70+
var values = Arrays.asList(DayOfWeek.values());
71+
72+
var result = mapOf(mapAll(values, value -> entry(value, value.ordinal())));
73+
74+
var i = result.get(DayOfWeek.MONDAY); // 0
75+
76+
assertEquals(0, i);
77+
78+
assertEquals(result, values.stream().collect(Collectors.toMap(value -> value, Enum::ordinal)));
7979
}
8080

8181
@Test

0 commit comments

Comments
 (0)