diff --git a/src/main/java/com/ceticamarco/lambdatonic/Either.java b/src/main/java/com/ceticamarco/lambdatonic/Either.java index 1ca7363..b56a4d4 100644 --- a/src/main/java/com/ceticamarco/lambdatonic/Either.java +++ b/src/main/java/com/ceticamarco/lambdatonic/Either.java @@ -1,5 +1,6 @@ package com.ceticamarco.lambdatonic; +import java.util.Optional; import java.util.function.Function; /** @@ -99,4 +100,13 @@ public sealed interface Either permits Left, Right { */ L fromLeft(L defaultValue); + /** + *

+ * Converts an Either data type to a java.util.Optional. + * The Right becomes a non-null Optional and the Left + * becomes a null Optional + *

+ * @return An Optional data type + */ + Optional toOptional(); } \ No newline at end of file diff --git a/src/main/java/com/ceticamarco/lambdatonic/Left.java b/src/main/java/com/ceticamarco/lambdatonic/Left.java index 076fcca..5a57fe9 100644 --- a/src/main/java/com/ceticamarco/lambdatonic/Left.java +++ b/src/main/java/com/ceticamarco/lambdatonic/Left.java @@ -1,5 +1,6 @@ package com.ceticamarco.lambdatonic; +import java.util.Optional; import java.util.function.Function; /** @@ -46,4 +47,9 @@ public record Left(L value) implements Either { public L fromLeft(L defaultValue) { return this.value; } + + @Override + public Optional toOptional() { + return Optional.empty(); + } } \ No newline at end of file diff --git a/src/main/java/com/ceticamarco/lambdatonic/Right.java b/src/main/java/com/ceticamarco/lambdatonic/Right.java index 1a95c2c..828969b 100644 --- a/src/main/java/com/ceticamarco/lambdatonic/Right.java +++ b/src/main/java/com/ceticamarco/lambdatonic/Right.java @@ -1,5 +1,6 @@ package com.ceticamarco.lambdatonic; +import java.util.Optional; import java.util.function.Function; /** @@ -46,4 +47,9 @@ public record Right(R value) implements Either { public L fromLeft(L defaultValue) { return defaultValue; } + + @Override + public Optional toOptional() { + return Optional.of(this.value); + } } \ No newline at end of file diff --git a/src/test/java/com/ceticamarco/lambdatonic/LeftTests.java b/src/test/java/com/ceticamarco/lambdatonic/LeftTests.java index cc0acce..95994c8 100644 --- a/src/test/java/com/ceticamarco/lambdatonic/LeftTests.java +++ b/src/test/java/com/ceticamarco/lambdatonic/LeftTests.java @@ -3,6 +3,7 @@ package com.ceticamarco.lambdatonic; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.BeforeEach; +import java.util.Optional; import java.util.function.Function; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -94,4 +95,12 @@ public class LeftTests { public void testFromLeftOnLeft() { assertEquals(this.resEither.fromLeft(-1), 19); } + + @Test + public void testToOptionalFromLeft() { + assertEquals( + this.numEither.toOptional(), + Optional.empty() + ); + } } diff --git a/src/test/java/com/ceticamarco/lambdatonic/RightTests.java b/src/test/java/com/ceticamarco/lambdatonic/RightTests.java index dcde712..daebfca 100644 --- a/src/test/java/com/ceticamarco/lambdatonic/RightTests.java +++ b/src/test/java/com/ceticamarco/lambdatonic/RightTests.java @@ -3,6 +3,7 @@ package com.ceticamarco.lambdatonic; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.BeforeEach; +import java.util.Optional; import java.util.function.Function; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -94,4 +95,12 @@ public class RightTests { public void testFromLeftOnRight() { assertEquals(this.resEither.fromLeft(-1), -1); } + + @Test + public void testToOptionalFromRight() { + assertEquals( + this.numEither.toOptional(), + Optional.of(4) + ); + } }