From bc16f8f8ad4fd888522a5ab01535fc9bd80df394 Mon Sep 17 00:00:00 2001 From: Sergei Date: Tue, 12 May 2020 08:59:57 -0700 Subject: [PATCH] Option<>.collect() not to call PartialFunction collector on arguments where it is not defined --- src/main/java/io/vavr/PartialFunction.java | 2 +- src/test/java/io/vavr/control/OptionTest.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/vavr/PartialFunction.java b/src/main/java/io/vavr/PartialFunction.java index 34fb32a216..8378c3eace 100644 --- a/src/main/java/io/vavr/PartialFunction.java +++ b/src/main/java/io/vavr/PartialFunction.java @@ -123,7 +123,7 @@ public boolean isDefinedAt(V v) { * if the function is defined for the given arguments, and {@code None} otherwise. */ default Function1> lift() { - return t -> Option.when(isDefinedAt(t), apply(t)); + return t -> Option.when(isDefinedAt(t), () -> apply(t)); } } diff --git a/src/test/java/io/vavr/control/OptionTest.java b/src/test/java/io/vavr/control/OptionTest.java index b4aa933c24..4d0febe428 100644 --- a/src/test/java/io/vavr/control/OptionTest.java +++ b/src/test/java/io/vavr/control/OptionTest.java @@ -563,6 +563,12 @@ public void shouldThrowExceptionOnNullCollectPartialFunction() { Option.some(1).collect(pf); } + @Test + public void shouldNotCallPartialFunctionOnUndefinedArg() { + final PartialFunction pf = Function1. of(x -> 1/x).partial(i -> i != 0); + assertThat(Option.of(0).collect(pf)).isEqualTo(Option.none()); + } + // -- iterator @Test