我有两个Optional
字符串,分别是name1
和name2
。我想将它们合并成一个Optional
,满足以下条件:
- 如果其中一个字符串不为空,则结果应为非空的那个字符串。
- 如果两个字符串都不为空,我想用分隔符
AND
将它们拼接起来。 - 如果两个字符串都为空,则结果应为一个空的
Optional
我的尝试:
StringBuilder sb = new StringBuilder();
name1.ifPresent(sb::append);
name2.ifPresent(s -> {
if (sb.length() > 0) {
sb.append(" AND ");
}
sb.append(s);
}
Optional<String> joinedOpt = Optional.ofNullable(Strings.emptyToNull(sb.toString()));
这个方法可以运行,但看起来不太美观并且功能也不够完善。
顺便说一下:这里有一个类似的问题,但被接受的答案是错误的。具体来说,如果name1
为空而name2
不为空,它会返回一个空的optional。