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