File tree Expand file tree Collapse file tree
main/java/net/marcellperger/mathexpr/util/rs
test/java/net/marcellperger/mathexpr/util/rs Expand file tree Collapse file tree Original file line number Diff line number Diff line change 33import net .marcellperger .mathexpr .util .Util ;
44import org .jetbrains .annotations .Contract ;
55import org .jetbrains .annotations .NotNull ;
6+ import org .jetbrains .annotations .Nullable ;
67
78import java .util .Collections ;
89import java .util .Iterator ;
10+ import java .util .Optional ;
911import java .util .function .Consumer ;
1012import java .util .function .Function ;
1113import java .util .function .Predicate ;
@@ -46,6 +48,14 @@ record None<T>() implements Option<T> {
4648 return new None <>();
4749 }
4850
51+ static <T > Option <@ NotNull T > ofNullable (@ Nullable T value ) {
52+ return ofOptional (Optional .ofNullable (value ));
53+ }
54+ @ SuppressWarnings ("OptionalUsedAsFieldOrParameterType" )
55+ static <T > Option <T > ofOptional (Optional <T > value ) {
56+ return value .map (Option ::newSome ).orElse (newNone ());
57+ }
58+
4959 default boolean isSome () {
5060 return this instanceof Some <T >;
5161 }
Original file line number Diff line number Diff line change @@ -91,8 +91,6 @@ default boolean isErrAnd(Predicate<? super E> f) {
9191 };
9292 }
9393
94- // TODO: once Option is done, do proper ok() / err() -> Option<T / E>
95-
9694 default <U > Result <U , E > map (Function <? super T , ? extends U > op ) {
9795 return switch (this ) {
9896 case Ok (T value ) -> new Ok <>(op .apply (value ));
Original file line number Diff line number Diff line change 66import java .util .ArrayList ;
77import java .util .Iterator ;
88import java .util .List ;
9+ import java .util .Optional ;
910
1011import static org .junit .jupiter .api .Assertions .*;
1112
@@ -343,4 +344,16 @@ void test_toString() {
343344 assertEquals ("Some(314)" , getSome ().toString ());
344345 assertEquals ("None" , getNone ().toString ());
345346 }
347+
348+ @ Test
349+ void ofOptional () {
350+ assertEquals (Option .newSome (314 ), Option .ofOptional (Optional .of (314 )));
351+ assertEquals (Option .newNone (), Option .ofOptional (Optional .empty ()));
352+ }
353+
354+ @ Test
355+ void ofNullable () {
356+ assertEquals (Option .newSome (314 ), Option .ofNullable (314 ));
357+ assertEquals (Option .newNone (), Option .ofNullable (null ));
358+ }
346359}
You can’t perform that action at this time.
0 commit comments