Merge pull request #15113 from danielmcnally285/danielmcnally285_return_first_non_null
BAEL-7010 - return first non null
This commit is contained in:
commit
b6dc257c80
|
@ -0,0 +1,16 @@
|
|||
package com.baeldung.returnfirstnonnull;
|
||||
|
||||
class LazyEvaluate {
|
||||
|
||||
String methodA() {
|
||||
return null;
|
||||
}
|
||||
|
||||
String methodB() {
|
||||
return "first non null";
|
||||
}
|
||||
|
||||
String methodC() {
|
||||
return "second non null";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package com.baeldung.returnfirstnonempty;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class ReturnFirstNonEmptyOptionalUnitTest {
|
||||
|
||||
private List<Optional<String>> optionals;
|
||||
|
||||
@BeforeEach
|
||||
public void init() {
|
||||
optionals = Arrays.asList(Optional.<String> empty(), Optional.of("first non empty"), Optional.of("second non empty"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenListOfOptionals_whenStreaming_thenReturnFirstNonEmpty() {
|
||||
Optional<String> object = optionals.stream()
|
||||
.filter(Optional::isPresent)
|
||||
.map(Optional::get)
|
||||
.findFirst();
|
||||
|
||||
assertThat(object).contains("first non empty");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
package com.baeldung.returnfirstnonnull;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
public class ReturnFirstNonNullLazyEvaluateUnitTest {
|
||||
|
||||
private final LazyEvaluate spy = Mockito.spy(new LazyEvaluate());
|
||||
|
||||
@Test
|
||||
void givenChainOfMethods_whenUsingIfStatements_thenLazilyEvaluateMethodsUntilFirstNonNull() {
|
||||
String object = spy.methodA();
|
||||
if (object == null) {
|
||||
object = spy.methodB();
|
||||
}
|
||||
|
||||
if (object == null) {
|
||||
object = spy.methodC();
|
||||
}
|
||||
|
||||
assertEquals("first non null", object);
|
||||
verify(spy, times(1)).methodA();
|
||||
verify(spy, times(1)).methodB();
|
||||
verify(spy, times(0)).methodC();
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenChainOfMethods_whenUsingApacheCommonsLang3_thenReturnFirstNonNull() {
|
||||
String object = ObjectUtils.getFirstNonNull(spy::methodA, spy::methodB, spy::methodC);
|
||||
|
||||
assertEquals("first non null", object);
|
||||
verify(spy, times(1)).methodA();
|
||||
verify(spy, times(1)).methodB();
|
||||
verify(spy, times(0)).methodC();
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenChainOfMethods_whenUsingSupplierInterface_thenLazilyEvaluateMethodsUntilFirstNonNull() {
|
||||
Optional<String> object = Stream.<Supplier<String>> of(spy::methodA, spy::methodB, spy::methodC)
|
||||
.map(Supplier::get)
|
||||
.filter(Objects::nonNull)
|
||||
.findFirst();
|
||||
|
||||
assertThat(object).contains("first non null");
|
||||
verify(spy, times(1)).methodA();
|
||||
verify(spy, times(1)).methodB();
|
||||
verify(spy, times(0)).methodC();
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenNonNullObjectAndFallbackMethod_whenUsingApacheCommonsLang3_thenReturnFirstNonNull() {
|
||||
String nonNullObject = spy.methodB();
|
||||
String object = ObjectUtils.getIfNull(nonNullObject, spy::methodC);
|
||||
|
||||
assertEquals("first non null", object);
|
||||
verify(spy, times(0)).methodC();
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenNullObjectAndFallbackMethod_whenUsingApacheCommonsLang3_thenReturnFirstNonNull() {
|
||||
String nullObject = null;
|
||||
String object = ObjectUtils.getIfNull(nullObject, spy::methodB);
|
||||
|
||||
assertEquals("first non null", object);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,81 @@
|
|||
package com.baeldung.returnfirstnonnull;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import com.google.common.base.MoreObjects;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
public class ReturnFirstNonNullUnitTest {
|
||||
|
||||
private List<String> objects;
|
||||
|
||||
@BeforeEach
|
||||
public void init() {
|
||||
objects = Arrays.asList(null, "first non null", "second nun null");
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenListOfObjects_whenFilterIsLambdaNullCheckInStream_thenReturnFirstNonNull() {
|
||||
Optional<String> object = objects.stream()
|
||||
.filter(o -> o != null)
|
||||
.findFirst();
|
||||
|
||||
assertThat(object).contains("first non null");
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenListOfObjects_whenFilterIsMethodRefNullCheckInStream_thenReturnFirstNonNull() {
|
||||
Optional<String> object = objects.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.findFirst();
|
||||
|
||||
assertThat(object).contains("first non null");
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenListOfObjects_whenIteratingWithForLoop_thenReturnFirstNonNull() {
|
||||
String object = null;
|
||||
for (int i = 0; i < objects.size(); i++) {
|
||||
if (objects.get(i) != null) {
|
||||
object = objects.get(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
assertEquals("first non null", object);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenListOfObjects_whenUsingApacheCommonsLang3_thenReturnFirstNonNull() {
|
||||
String object = ObjectUtils.firstNonNull(objects.toArray(new String[0]));
|
||||
|
||||
assertEquals("first non null", object);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenListOfObjects_whenUsingGoogleGuavaIterables_thenReturnFirstNonNull() {
|
||||
String object = Iterables.find(objects, Predicates.notNull());
|
||||
|
||||
assertEquals("first non null", object);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenTwoObjects_whenUsingGoogleGuavaMoreObjects_thenReturnFirstNonNull() {
|
||||
String nullObject = null;
|
||||
String nonNullObject = "first non null";
|
||||
String object = MoreObjects.firstNonNull(nullObject, nonNullObject);
|
||||
|
||||
assertEquals("first non null", object);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue