Stepan Koltsov avatar Stepan Koltsov committed f8c6124

efficient implementation of ListF.{fold,reduce}Right using reverseIterator

Comments (0)

Files changed (1)

src/main/java/ru/yandex/bolts/collection/impl/AbstractListF.java

 
     @Override
     public E reduceRight(Function2<E, E, E> f) {
-        return reduceRightO(f).getOrThrow("empty.reduceRight");
+        return reverseIterator().reduceLeft(f.swap());
     }
 
     @Override
 
     @Override
     public Option<E> reduceRightO(Function2<E, E, E> f) {
-        IteratorF<E> i = iterator();
-        if (!i.hasNext()) {
-            return Option.none();
-        }
-
-        E head = i.next();
-        if (i.hasNext()) {
-            return Option.some(f.apply(head, reduceRight(f)));
-        } else {
-            return Option.some(head);
-        }
+        return reverseIterator().reduceLeftO(f.swap());
     }
 
     @Override
 
     @Override
     public <B> B foldRight(B z, Function2<E, B, B> f) {
-        IteratorF<E> i = iterator();
-        if (i.hasNext()) {
-            return f.apply(i.next(), foldRight(z, f));
-        } else {
-            return z;
-        }
+        return reverseIterator().foldLeft(z, f.swap());
     }
 
     @Override
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.