@@ -1027,25 +1027,7 @@ default Stream<T> filter(Predicate<? super T> predicate) {
10271027 @ Override
10281028 default <U > Stream <U > flatMap (Function <? super T , ? extends Iterable <? extends U >> mapper ) {
10291029 Objects .requireNonNull (mapper , "mapper is null" );
1030- return isEmpty () ? Empty .instance () : Stream .ofAll (new Iterator <U >() {
1031-
1032- final Iterator <? extends T > inputs = Stream .this .iterator ();
1033- java .util .Iterator <? extends U > current = java .util .Collections .emptyIterator ();
1034-
1035- @ Override
1036- public boolean hasNext () {
1037- boolean currentHasNext ;
1038- while (!(currentHasNext = current .hasNext ()) && inputs .hasNext ()) {
1039- current = mapper .apply (inputs .next ()).iterator ();
1040- }
1041- return currentHasNext ;
1042- }
1043-
1044- @ Override
1045- public U next () {
1046- return current .next ();
1047- }
1048- });
1030+ return isEmpty () ? Empty .instance () : Stream .ofAll (new FlatMapIterator <>(this .iterator (), mapper ));
10491031 }
10501032
10511033 @ Override
@@ -2100,4 +2082,30 @@ public T getNext() {
21002082 return stream .head ();
21012083 }
21022084 }
2085+
2086+ final class FlatMapIterator <T , U > implements Iterator <U > {
2087+
2088+ final Function <? super T , ? extends Iterable <? extends U >> mapper ;
2089+ final Iterator <? extends T > inputs ;
2090+ java .util .Iterator <? extends U > current = java .util .Collections .emptyIterator ();
2091+
2092+ FlatMapIterator (Iterator <? extends T > inputs , Function <? super T , ? extends Iterable <? extends U >> mapper ) {
2093+ this .inputs = inputs ;
2094+ this .mapper = mapper ;
2095+ }
2096+
2097+ @ Override
2098+ public boolean hasNext () {
2099+ boolean currentHasNext ;
2100+ while (!(currentHasNext = current .hasNext ()) && inputs .hasNext ()) {
2101+ current = mapper .apply (inputs .next ()).iterator ();
2102+ }
2103+ return currentHasNext ;
2104+ }
2105+
2106+ @ Override
2107+ public U next () {
2108+ return current .next ();
2109+ }
2110+ }
21032111}
0 commit comments