以函数式方式重写嵌套的三元运算符

Rewrite nested ternary operators in functional way

我有如下一段代码:

String firstString = "sth";
String secondString = "sthElse";

String stringsSpecialConcat = String.format("%s<br>%s", firstString, secondString);

boolean isFirstStringNotBlank = StringUtils.isNotBlank(firstString);
boolean isSecondStringNotBlank = StringUtils.isNotBlank(secondString);

return isFirstStringNotBlank ? (isSecondStringNotBlank ? stringsSpecialConcat : firstString) : (isSecondStringNotBlank ? secondString : "")

能否请您通过函数式编程帮助我简化以上内容?

我想使用类似于

的东西
Stream.of(firstString, secondString).collect(joining(""))

这……其实还不错。你能做的最好的是

Stream.of(firstString, secondString)
  .filter(StringUtils::isNotBlank)
  .collect(joining("<br>"));

您可能会或可能不会觉得更简单。

Stream.of(firstString, secondString)
    .filter(StringUtils::isNotBlank)
    .collect(Collectors.joining("<br>"))

Collectors.joining 只会在有 2 个或更多元素时插入分隔符。在你的情况下,那是两者都非空的时候。

如果两者都为空,则结果为""

如果first为空,则结果为"second"

如果第二个为空,则结果为"first"

如果两者都不为空,则结果为"first<br>second"