Текущие ответы хороши, но вы действительно должны поместить это в служебный метод:
public static Optional<String> firstNonNull(String... strings) {
return Arrays.stream(strings)
.filter(Objects::nonNull)
.findFirst();
}
Этот метод был в моем классе Util
в течение многих лет, делает код намного чище:
String s = firstNonNull(str1, str2, str3).orElse(str4);
Вы даже можете сделать его родовым:
@SafeVarargs
public static <T> Optional<T> firstNonNull(T... objects) {
return Arrays.stream(objects)
.filter(Objects::nonNull)
.findFirst();
}
// Use
Student student = firstNonNull(student1, student2, student3).orElseGet(Student::new);