diff --git a/optionals/.project b/optionals/.project
new file mode 100644
index 0000000..1917593
--- /dev/null
+++ b/optionals/.project
@@ -0,0 +1,17 @@
+
+
+ optionals
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/optionals/.settings/org.eclipse.core.resources.prefs b/optionals/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/optionals/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=UTF-8
diff --git a/optionals/.settings/org.eclipse.jdt.core.prefs b/optionals/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..9a7984b
--- /dev/null
+++ b/optionals/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=21
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=21
diff --git a/optionals/src/optionals/Main.java b/optionals/src/optionals/Main.java
new file mode 100644
index 0000000..e882597
--- /dev/null
+++ b/optionals/src/optionals/Main.java
@@ -0,0 +1,42 @@
+package optionals;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+class OptionalUtils {
+ // Return the list of `f()` applied to every element in `xs`, but do not
+ // include the empty results.
+ static List
+ convertPassing(List xs, Function> f) {
+ return null;
+ }
+
+ // Return the list of `f()` applied to every element in `xs`, but do not
+ // include the resuslts that don't pass `pred()`.
+ static List
+ convertPassing(List xs, Function f, Predicate pred) {
+ return null;
+ }
+
+ // Drop all empty values.
+ static List dropEmpty(List> xs) {
+ return xs.stream().filter(Optional::isEmpty);
+ }
+
+ // Return a new function that applies `f()` to non-null values and returns
+ // empty optionals on null values.
+ static Function> nullFriendly(Function f) {
+ return null;
+ }
+
+ // Apply and to the boolean values if both are present, otherwise return
+ // empty optional.
+ static Optional
+ optionalAnd(Optional b1, Optional b2) {
+ return null;
+ }
+}
+
+class Examples {}