Stack(x.split("-").map(_.toInt).reverse: _*)
Хитрость здесь в том, чтобы передать массив, полученный из split, в компоновщик объектов Stack
. По умолчанию элементы располагаются в том же порядке, что и массив, поэтому сначала необходимо изменить массив.
Обратите внимание, что «обрабатывать это как список, а не как отдельный элемент», : _*
.
Редактировать: если вы не хотите отлавливать регистр пустых строк отдельно, например, так (используйте нижний для изменяемых стеков, верхний для неизменных):
if (x.isEmpty) Stack() else Stack(x.split("-").map(_.toInt).reverse: _*)
if (x.isEmpty) Stack[Int]() else Stack(x.split("-").map(_.toInt).reverse: _*)
тогда вы можете отфильтровать пустые строки:
Stack(x.split("-").filterNot(_.isEmpty).map(_.toInt).reverse: _*)
, который также «услужливо» обрабатывает такие вещи, как 7-9----2-2-4
для вас (это даст Stack(4,2,2,9,7)
).
Если вы хотите обрабатывать еще более опасные ошибки форматирования, вы можете
val guard = scala.util.control.Exception.catching[Int](classOf[NumberFormatException])
Stack(x.split("-").flatMap(x => guard.opt(x.toInt)).reverse: _*)
чтобы вернуть только те элементы, которые действительно могут быть проанализированы.