Commits

Stepan Koltsov  committed f8c6124

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

  • Participants
  • Parent commits bec58f3

Comments (0)

Files changed (1)

File 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