Просто добавьте к ответу @ Lino, чтобы предложить более общий подход: я предполагаю, что вы хотите суммировать числа (будь то целые числа, числа с плавающей запятой или что-то еще) и объединять все что угодно (строки, символы, даже случайные объекты, такие как Duration
или Instant
).Просто символы будут сдавлены вместе, в то время как строки (или что-то еще, в этом отношении) будут объединены с пробелом.
Вы можете вернуть Object
или что-то немного более узкое, которое подходит для обоих чисел истроки (например, Serializable
или Comparable<?>
);это вряд ли полезно, но мешает вам возвращать действительно случайные вещи.
В качестве альтернативы, вы можете решить всегда возвращать String
и просто возвращать сумму в виде строки (для чисел).
Реальная реализация может выглядеть довольно аккуратно, если вы используете потоки Java8:
// the `E` generic type brings you nothing, as you can't make use of it at compile time,
// so you can simply drop it and go with a mere `Object[]` array, as per @Lino
public static <E> Serializable returnArray(E[] values) {
// exclude null values if any (note that `E` proves itself useless already):
final Stream<?> stream = Stream.of(values).filter(Objects::nonNull);
if (values instanceof Number[]) {
// you can use mapToDouble and doubleValue, for a more accurate sum
return stream.map(Number.class::cast).mapToInt(Number::intValue).sum();
} else {
// squash characters, but use a space separator for anything else
final String separator = (values instanceof Character[]) ? "" : " ";
return stream.map(Object::toString).collect(Collectors.joining(separator));
}
}