4 回答

TA貢獻1712條經驗 獲得超3個贊
你可以這樣做:
String s = Stream.of(str1, str2, str3) .filter(Objects::nonNull) .findFirst() .orElse(str4);

TA貢獻1826條經驗 獲得超6個贊
三元條件運算符呢?
String s =
str1 != null ? str1 :
str2 != null ? str2 :
str3 != null ? str3 : str4
;

TA貢獻1865條經驗 獲得超7個贊
您還可以使用循環:
String[] strings = {str1, str2, str3, str4};
for(String str : strings) {
s = str;
if(s != null) break;
}

TA貢獻1887條經驗 獲得超5個贊
當前的答案很好,但你真的應該把它放在一個實用方法中:
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);
添加回答
舉報