我将发送两个变量,如果要检查变量是否为空。如果它不为 null,则使用任何分隔符连接两个字符串。 否则仅返回一个或空字符串。
我们是否有任何内置的测试方法或比下面更好的方法?
private String getValue(String valueOne, String valueTwo) {
String value = null;
if(valueOne != null) {
value = valueOne;
}
if(value != null && valueTwo != null) {
value += "-" + valueTwo;
}else if(valueTwo != null) {
value = valueTwo;
}
return value !=null ? value : "";
}
a = "abc" and b = "efg"
OUTPUT: "abc-efg"
a = null and b = "abc"
OUTPUT: "abc";
我选择接受任何数字参数,但更改为只接受两个很容易,然后您仍然可以使用Stream.of
private String getValue2(String... values) {
return Stream.of(values)
.filter(Objects::nonNull)
.collect(Collectors.joining("-"));
}
您可以重构为以下结构,该结构还检查空字符串并在找到合适的配置时逐渐返回。
private String getValue(String valueOne, String valueTwo)
{
if(isNullOrEmpty(valueOne) && isNullOrEmpty(valueTwo))
{
return "";
}
else if (isNullOrEmpty(valueOne))
{
return valueTwo;
}
else if (isNullOrEmpty(valueTwo))
{
return valueOne;
}
return valueOne.concat("-").concat(valueTwo);
}
private boolean isNullOrEmpty(String str)
{
return str == null || str.isEmpty();
}
在这种情况下,您可以使用可选。 将字符串从参数替换为可选也很好,在这种情况下,该方法可以简化。
private String getValue(String valueOne, String valueTwo) {
Optional<String> valOne = Optional.ofNullable(valueOne);
Optional<String> valTwo = Optional.ofNullable(valueTwo);
return valOne.orElse("") +
((valOne.isPresent() && valTwo.isPresent()) ? "-" : "") +
valTwo.orElse("");
}
我会尝试以更高的可读性重写它,如下所示:
private String getValue(@Nonnull String mandatoryStr, Optional<String> optionalStr) {
if (optionalStr.isPresent()) {
mandatoryStr += "-" + optionalStr;
}
return mandatoryStr;
}
当然,您必须导入这些导入:
import javax.annotation.Nonnull;
import java.util.Optional;