Skip to content

Commit e5bfe9b

Browse files
committed
Optionals.nonEmpty(String)
1 parent 064ae1d commit e5bfe9b

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

mug/src/main/java/com/google/mu/util/Optionals.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,16 @@ public static <C extends Collection<?>> Optional<C> nonEmpty(C collection) {
105105
return collection.isEmpty() ? Optional.empty() : Optional.of(collection);
106106
}
107107

108+
/**
109+
* Returns {@code Optional.empty()} if {@code s} is null or empty;
110+
* otherwise wraps it with {@link Optional#of}.
111+
*
112+
* @since 9.9.3
113+
*/
114+
public static <S extends CharSequence> Optional<S> nonEmpty(S s) {
115+
return optional(s != null && s.length() > 0, s);
116+
}
117+
108118
/**
109119
* If {@code a} and {@code b} are present, returns a {@code BiOptional} instance containing them;
110120
* otherwise returns an empty {@code BiOptional}.

mug/src/test/java/com/google/mu/util/OptionalsTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,18 @@ public class OptionalsTest {
8282
assertThat(Optionals.nonEmpty(asList(1))).hasValue(asList(1));
8383
}
8484

85+
@Test public void nonEmpty_nullString() {
86+
assertThat(Optionals.nonEmpty("")).isEmpty();
87+
}
88+
89+
@Test public void nonEmpty_emptyString() {
90+
assertThat(Optionals.nonEmpty("")).isEmpty();
91+
}
92+
93+
@Test public void nonEmpty_nonEmptyString() {
94+
assertThat(Optionals.nonEmpty("foo")).hasValue("foo");
95+
}
96+
8597
@Test public void ifPresent_or_firstIsAbsent_secondSupplierIsPresent() {
8698
ifPresent(Optional.empty(), consumer::accept)
8799
.or(() -> ifPresent(Optional.of("left"), Optional.of("right"), action::run))
@@ -256,12 +268,14 @@ public void inOrder_bothStepsArePresent() {
256268
.setDefault(BiOptional.class, BiOptional.of(1, "one"))
257269
.ignore(Optionals.class.getMethod("optional", boolean.class, Object.class))
258270
.ignore(Optionals.class.getMethod("both", Optional.class, Optional.class))
271+
.ignore(Optionals.class.getMethod("nonEmpty", CharSequence.class))
259272
.testAllPublicStaticMethods(Optionals.class);
260273
new NullPointerTester()
261274
.setDefault(Optional.class, Optional.of("foo"))
262275
.setDefault(OptionalInt.class, OptionalInt.of(123))
263276
.setDefault(OptionalLong.class, OptionalLong.of(123))
264277
.setDefault(OptionalDouble.class, OptionalDouble.of(123))
278+
.ignore(Optionals.class.getMethod("nonEmpty", CharSequence.class))
265279
.setDefault(BiOptional.class, BiOptional.of(1, "one"))
266280
.ignore(Optionals.class.getMethod("optional", boolean.class, Object.class))
267281
.testAllPublicStaticMethods(Optionals.class);

0 commit comments

Comments
 (0)