import org.springframework.util.ObjectUtils;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.function.Supplier;
import java.util.stream.Stream;
public class CheckUtil {
public static <T> T checkFindFirstNotEmpty(T... args) {
return checkFindFirst(Objects::nonNull, args);
}
public static <T> T checkFindFirstNotEmpty(Supplier<T>... suppliers) {
return checkFindFirstLazy(Objects::nonNull, suppliers);
}
public static <T> T checkFindFirst(Predicate<T> predicate, T... args) {
return Optional.ofNullable(args)
.flatMap(arr -> Stream.of(arr).filter(predicate::test).findFirst())
.orElse(null);
}
public static <T> T checkFindFirstLazy(Predicate<T> predicate, Supplier<T>... suppliers) {
return Stream.of(suppliers)
.map(Supplier::get)
.filter(predicate::test)
.findFirst()
.orElse(null);
}
}
class Test {
public static void main(String[] args) {
String result1 = CheckUtil.checkFindFirstNotEmpty(null, "", "hello", "world");
System.out.println("result1 = " + result1);
Integer result2 = CheckUtil.checkFindFirstNotEmpty(null, 0, 1, 2);
System.out.println("result2 = " + result2);
String result3 = CheckUtil.checkFindFirstNotEmpty(() -> null, () -> "", () -> "hello", () -> "world");
System.out.println("result3 = " + result3);
Integer result4 = CheckUtil.checkFindFirstNotEmpty(() -> null, () -> 0, () -> 1, () -> 2);
System.out.println("result4 = " + result4);
String result5 = CheckUtil.checkFindFirst(x -> !ObjectUtils.isEmpty(x), "", null, "111", null, new Test().getStr("s11", "s22"));
System.out.println("result5 = " + result5);
String result6 = CheckUtil.checkFindFirstLazy(x -> !ObjectUtils.isEmpty(x), () -> "", () -> null, () -> "111", () -> null, () -> new Test().getStr("s11", "s22"));
System.out.println("result6 = " + result6);
}
public String getStr(String s1, String s2) {
System.out.println("Test.getStr");
return s1 + "," + s2;
}
}