一般情况下的写法:
String s = null;
if (str1 != null) {
s = str1;
} else if (str2 != null) {
s = str2;
} else if (str3 != null) {
s = str3;
} else {
s = str4;
}
1、使用Stream的写法
经常需要对多个字符串进行null值判断。传统的做法是使用循环逐个判断,比较繁琐。Java 8引入的Stream API提供了一种更简洁、优雅的处理方式。
import java.util.Objects; import java.util.stream.Stream; public class Main { public static void main(String[] args) { String str1 = null; String str2 = null; String str3 = "Hello, World!"; String str4 = "Default Value"; String result = Stream.of(str1, str2, str3) .filter(Objects::nonNull) .findFirst() .orElse(str4); System.out.println("The first non-null string is: " + result); } }
或
import java.util.Arrays; import java.util.Objects; import java.util.Optional; public class Main { // 定义firstNonNull方法,返回第一个非null的字符串的Optional public static Optional<String> firstNonNull(String... strings) { return Arrays.stream(strings) .filter(Objects::nonNull) .findFirst(); } public static void main(String[] args) { String str1 = null; String str2 = null; String str3 = "Hello, World!"; String str4 = "Default Value"; // 使用firstNonNull方法,获取第一个非null的字符串,或者返回默认值 String result = firstNonNull(str1, str2, str3).orElse(str4); System.out.println("The first non-null string is: " + result); } }
2、使用三元运算符
可以嵌套使用三元运算符,但过多的嵌套会降低代码的可读性。
String s =
str1 != null ? str1 :
str2 != null ? str2 :
str3 != null ? str3 : str4
;
3、使用for循环判断
传统的做法是逐个判断每个字符串是否为null,比较繁琐。使用for循环可以简化这一过程,提高代码的可读性。
String[] strings = {str1, str2, str3, str4};
for(String str : strings) {
s = str;
if(s != null) break;
}