Я пытаюсь объединить String
условно. Например, в методе у меня есть два параметра и локальная переменная String
. Если я предоставлю значения для этих параметров, то эти значения будут добавлены в локальную переменную String
.
public Object concatinateString(String a, String b){
String xyz = "firstValue";
if((a == null || a == "") && (b != null || b != "")) {
xyz = xyz.concat(".").concat(b);
}
if((b == null || b == "") && (a != null || a != "")) {
xyz = xyz.concat(".").concat(a);
}
xyz = xyz.concat(".").concat(a).concat(".").concat(b);
}
что я ожидаю:
concatinateString(null, b) --> xyz = firstValue.b;
concatinateString("", b) --> xyz = firstValue.b
concatinateString(a, null) --> xyz = firstValue.a
concatinateString(a, "") --> xyz = firstValue.a
concatinateString("", "") --> xyz = firstValue
concatinateString(null, null) --> xyz = firstValue
concatinateString(a, b) --> xyz = firstValue.a.b
I также пробовал следующий код, но не получил ожидаемый результат.
public Object concatinateString(Optional<String> stageName, Optional<String> systemName) {
Optional<String> property = Optional.of("firstValue");
if ((!stageName.isPresent() || stageName.equals("")) && systemName.isPresent()) {
property = Stream.of(property, systemName).flatMap(x -> x.map(Stream::of).orElse(null)).reduce((a, b) -> a + "." + b);
}
if (((!systemName.isPresent() || systemName.equals(""))) && stageName.isPresent()) {
property = Stream.of(property, stageName).flatMap(x -> x.map(Stream::of).orElse(null)).reduce((a, b) -> a + "." + b);
}
property = Stream.of(property, stageName, systemName)
.flatMap(x -> x.map(Stream::of).orElse(null))
.reduce((a, b) -> a + "." + b);
return property;
}
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.concatinateString(Optional.ofNullable(null),Optional.ofNullable(null)));
}
Результат, который я получаю:
concatinateString(null, b) --> xyz = firstValue.b.b
concatinateString("", b) --> xyz = firstValue..b
concatinateString(a, null) --> xyz = firstValue.a.a
concatinateString(a, "") --> xyz = firstValue.a.
concatinateString("", "") --> xyz = firstValue..
concatinateString(null, null) --> xyz = firstValue
concatinateString(a, b) --> xyz = firstValue.a.b