From 4cf8e37e7e1f1a1e134d05d0f5a0c0b81f1d953d Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Wed, 22 Feb 2023 11:22:14 -0600 Subject: [PATCH] Add good getFirstNonNull method --- .../qqq/backend/core/utils/ValueUtils.java | 25 +++++++++++++++++++ .../backend/core/utils/ValueUtilsTest.java | 22 +++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) 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