From 2e2373d9f3f9cb6997fc399b51237d20e15aad2b Mon Sep 17 00:00:00 2001 From: Sergei Semenov Date: Tue, 7 Dec 2021 07:48:57 -0800 Subject: [PATCH] Performance improvement for List::unfold, List::unfoldLeft (#2689) --- vavr/src/main/java/io/vavr/collection/List.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vavr/src/main/java/io/vavr/collection/List.java b/vavr/src/main/java/io/vavr/collection/List.java index 0c981ea9c..6442bb9e8 100644 --- a/vavr/src/main/java/io/vavr/collection/List.java +++ b/vavr/src/main/java/io/vavr/collection/List.java @@ -712,7 +712,8 @@ static List unfoldRight(T seed, Function List unfoldLeft(T seed, Function>> f) { - return Iterator.unfoldLeft(seed, f).toList(); + return Iterator.unfoldRight(seed, f.andThen(tupleOpt -> tupleOpt.map(Tuple2::swap))) + .foldLeft(List.empty(), List::prepend); } /** @@ -740,7 +741,8 @@ static List unfoldLeft(T seed, Function List unfold(T seed, Function>> f) { - return Iterator.unfold(seed, f).toList(); + return Iterator.unfoldRight(seed, f.andThen(tupleOpt -> tupleOpt.map(Tuple2::swap))) + .foldLeft(List.empty(), List::prepend); } @Override