2323 * Provides static utility methods for working with iterables.
2424 */
2525public 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 /**
0 commit comments