diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/ValueUtils.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/ValueUtils.java index a870540b..ef24a030 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/ValueUtils.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/ValueUtils.java @@ -728,4 +728,29 @@ public class ValueUtils .with(ChronoField.NANO_OF_DAY, 0); return (startOfMonth.toInstant(zone.getRules().getOffset(computerTime))); } + + + + /******************************************************************************* + ** Return the first argument that isn't null. + ** If all were null, return null. + *******************************************************************************/ + public static T getFirstNonNull(T... ts) + { + if(ts == null || ts.length == 0) + { + return (null); + } + + for(T t : ts) + { + if(t != null) + { + return (t); + } + } + + return (null); + } + } diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/ValueUtilsTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/ValueUtilsTest.java index 90ff443a..fdec3ae4 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/ValueUtilsTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/ValueUtilsTest.java @@ -268,8 +268,28 @@ class ValueUtilsTest extends BaseTest assertEquals("1", ValueUtils.getValueAsType(String.class, 1)); assertEquals(BigDecimal.ONE, ValueUtils.getValueAsType(BigDecimal.class, 1)); assertEquals(true, ValueUtils.getValueAsType(Boolean.class, "true")); - assertArrayEquals("a".getBytes(StandardCharsets.UTF_8), ValueUtils.getValueAsType(byte[].class, "a")); + assertArrayEquals("a" .getBytes(StandardCharsets.UTF_8), ValueUtils.getValueAsType(byte[].class, "a")); assertThrows(QValueException.class, () -> ValueUtils.getValueAsType(Serializable.class, 1)); } + + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testGetFirstNonNull() + { + assertEquals(0, ValueUtils.getFirstNonNull(0)); + assertEquals(1, ValueUtils.getFirstNonNull(1, 2)); + assertEquals(2, ValueUtils.getFirstNonNull(null, 2)); + assertEquals(3, ValueUtils.getFirstNonNull(null, null, 3)); + + assertNull(ValueUtils.getFirstNonNull()); + assertNull(ValueUtils.getFirstNonNull(new Object[] { })); + assertNull(ValueUtils.getFirstNonNull(null)); + assertNull(ValueUtils.getFirstNonNull(null, null)); + + } + } \ No newline at end of file