Add good getFirstNonNull method

This commit is contained in:
2023-02-22 11:22:14 -06:00
parent 1bdce12b8d
commit 4cf8e37e7e
2 changed files with 46 additions and 1 deletions

View File

@ -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> T getFirstNonNull(T... ts)
{
if(ts == null || ts.length == 0)
{
return (null);
}
for(T t : ts)
{
if(t != null)
{
return (t);
}
}
return (null);
}
}

View File

@ -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));
}
}