diff --git a/src/main/java/org/hisp/dhis/util/TextUtils.java b/src/main/java/org/hisp/dhis/util/TextUtils.java index 5c4c343b..ded015cf 100644 --- a/src/main/java/org/hisp/dhis/util/TextUtils.java +++ b/src/main/java/org/hisp/dhis/util/TextUtils.java @@ -29,6 +29,8 @@ import java.util.Objects; import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.ToStringBuilder; @@ -228,6 +230,20 @@ public static boolean isNull(String input) { return input == null; } + /** + * Returns a concatenated string of the input elements, ignoring null and empty items, separated + * by the specified delimiter, in encounter order. + * + * @param delimiter the delimiter. + * @param items the items. + * @return concatenated string of the input elements. + */ + public static String join(CharSequence delimiter, String... items) { + return Stream.of(items) + .filter(item -> item != null && item.length() > 0) + .collect(Collectors.joining(delimiter)); + } + /** * Creates a new {@link ToStringBuilder} with the given object and a short prefix style. * diff --git a/src/test/java/org/hisp/dhis/util/TextUtilsTest.java b/src/test/java/org/hisp/dhis/util/TextUtilsTest.java index cb2a7df2..266a102e 100644 --- a/src/test/java/org/hisp/dhis/util/TextUtilsTest.java +++ b/src/test/java/org/hisp/dhis/util/TextUtilsTest.java @@ -281,4 +281,12 @@ void testIsNull() { assertTrue(TextUtils.isNull(null)); assertFalse(TextUtils.isNull("")); } + + @Test + void testJoin() { + assertEquals("one::two::three", TextUtils.join("::", "one", "two", "three")); + assertEquals("one::three", TextUtils.join("::", "one", "", "three")); + assertEquals("one::three", TextUtils.join("::", "one", null, "three")); + assertEquals("", TextUtils.join("::", "")); + } }